设计模式漫谈之迭代器模式
談戀愛是兩個人的事,結婚是兩個家庭的事。最近事也挺多的。我也挺煩的,有時候,我也為自己的將來擔憂,我自認為自己的技術過硬,但是千里馬只有遇到伯樂才能發揮作用。
技術上讓我高興的事是,有個技術問題終于突破了,花了我1個多月時間惦記這事,終于我又花一天時間,不停的嘗試,堅持,最后終于搞定了。主要是用IL語言操作實體取值賦值方法,完全個人獨立所完成。使用這種方法,我的開源底層框架效率會提升數倍。也是我開源框架的亮點。目前我的開源應用程序底層框架在碼云托管平臺上托管著,github上只留有最原始的操作數據庫版本。至于這個項目什么時候公開,待以后再決定。目前還屬于建設完善階段。
重要是事多說幾遍,對象是具有空間的,空間是可以放東西的,如果這個東西是另一個對象,那么放的是這個對象的引用。這樣,兩個對象就發生關系了,即可以訪問的關系。
迭代器模式就是操作集合的一個對象,既然能操作集合,肯定存了集合的引用。集合的基類接口已經約束了,迭代集合對象。
迭代器即一個對象操作另一個對象。
直接上例子,我來解釋
//抽象的描述了關系,將來的Aggregate存了Iterator 對象的引用,可以訪問到Iterator 對象。
abstract class Aggregate
{
public abstract Iterator CreateIterator();
}
//具體對象
class ConcreteAggregate : Aggregate
{
//對象空間中的集合
private IList<object> items = new List<object>();
public override Iterator CreateIterator()
{
//同樣,生成的對象也存了宿主對象,即在ConcreteIterator這個對象中也可以訪問到宿主對象
return new ConcreteIterator(this);
}
public int Count
{
get { return items.Count; }
}
//索引的方式操作對象中的集合
public object this[int index]
{
get { return items[index]; }
set { items.Insert(index, value); }
}
}
//迭代器抽象對象的約束
abstract class Iterator
{
public abstract object First();
public abstract object Next();
public abstract bool IsDone();
public abstract object CurrentItem();
}
?
//具體的迭代器對象
class ConcreteIterator : Iterator
{
private ConcreteAggregate aggregate;
private int current = 0;
//存了宿主對象的引用,可以訪問到宿主對象
public ConcreteIterator(ConcreteAggregate aggregate)
{
this.aggregate = aggregate;
}
//都是訪問宿主對象
public override object First()
{
return aggregate[0];
}
public override object Next()
{
object ret = null;
current++;
if (current < aggregate.Count)
{
ret = aggregate[current];
}
return ret;
}
public override object CurrentItem()
{
return aggregate[current];
}
public override bool IsDone()
{
return current >= aggregate.Count ? true : false;
}
}
//集合對象,還可以這樣寫
//Aggregate?a = new ConcreteAggregate();
?
ConcreteAggregate a = new ConcreteAggregate();
a[0] = "大鳥";
a[1] = "小菜";
a[2] = "行李";
a[3] = "老外";
a[4] = "公交內部員工";
a[5] = "小偷";
//這個地方也可以這樣寫
//Iterator i =?a.CreateIterator();
Iterator i = new ConcreteIterator(a);
object item = i.First();
while (!i.IsDone())
{
Console.WriteLine("{0} 請買車票!", i.CurrentItem());
i.Next();
}
總結:不要看設計模式,要看思想,這個迭代器模式的思想就是宿主可以訪問其中對象,其中對象也可以訪問宿主。
最近比較忙,這篇寫了好幾天,程序員最重要的就是工作態度,工作習慣,工作經驗,編程思想。
玩面向對象都是在玩引用的,因為通過引用可以讓所關聯的對象互相訪問。
不說了,大家努力吧,我后天訂婚。
轉載于:https://www.cnblogs.com/wang-charle/p/9236127.html
總結
以上是生活随笔為你收集整理的设计模式漫谈之迭代器模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速排序--Python实现
- 下一篇: Spring Bean的装配(非XML文