設計模式漫談之迭代器模式

談戀愛是兩我的的事,結婚是兩個家庭的事。最近事也挺多的。我也挺煩的,有時候,我也爲本身的未來擔心,我自認爲本身的技術過硬,可是千里馬只有遇到伯樂才能發揮做用。git

技術上讓我高興的事是,有個技術問題終於突破了,花了我1個多月時間惦記這事,終於我又花一天時間,不停的嘗試,堅持,最後終於搞定了。主要是用IL語言操做實體取值賦值方法,徹底我的獨立所完成。使用這種方法,個人開源底層框架效率會提高數倍。也是我開源框架的亮點。目前個人開源應用程序底層框架在碼雲託管平臺上託管着,github上只留有最原始的操做數據庫版本。至於這個項目何時公開,待之後再決定。目前還屬於建設完善階段。程序員

重要是事多說幾遍,對象是具備空間的,空間是能夠放東西的,若是這個東西是另外一個對象,那麼放的是這個對象的引用。這樣,兩個對象就發生關係了,便可以訪問的關係。github

迭代器模式就是操做集合的一個對象,既然能操做集合,確定存了集合的引用。集合的基類接口已經約束了,迭代集合對象。數據庫

迭代器即一個對象操做另外一個對象。編程

直接上例子,我來解釋設計模式

//抽象的描述了關係,未來的Aggregate存了Iterator 對象的引用,能夠訪問到Iterator 對象。框架

abstract class Aggregate
{
public abstract Iterator CreateIterator();
}ide

//具體對象this

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();
}

總結:不要看設計模式,要看思想,這個迭代器模式的思想就是宿主能夠訪問其中對象,其中對象也能夠訪問宿主。

最近比較忙,這篇寫了好幾天,程序員最重要的就是工做態度,工做習慣,工做經驗,編程思想。

玩面向對象都是在玩引用的,由於經過引用可讓所關聯的對象互相訪問。

不說了,你們努力吧,我後天訂婚。

相關文章
相關標籤/搜索