1. 程式人生 > >設計模式-叠代器模式

設計模式-叠代器模式

設計模式 叠代器模式

interface Iterator { object First(); object Next(); bool isDone(); object CurrentItem(); } class myIterator : Iterator { private MyAggragate items; private int cuttent = 0; public myIterator(MyAggragate _items) { items = _items; } public object CurrentItem() { return items[cuttent]; } public object First() { return items[0]; } public bool isDone() { return cuttent>=items.Count?true:false; } public object Next() { cuttent++; if (cuttent >= items.Count) return null; return items[cuttent]; } } abstract class Aggragate { public abstract Iterator CreateIterator(); } class MyAggragate : Aggragate { private IList<string> list = new List<string>(); public int Count { get { return list.Count; } } public string this[int index] { get { return list[index]; } set { list.Insert(index, value); } } public override Iterator CreateIterator() { return new myIterator(this); } } //前端 static void Main(string[] args) { MyAggragate a = new MyAggragate(); a[0] = "張三"; a[1] = "李四"; a[2] = "王五"; a[3] = "王五2"; diedaiqi.Iterator i = new myIterator(a); var item = i.First(); Console.WriteLine("{0}1", item); while (!i.isDone()) { Console.WriteLine("{0}",i.CurrentItem()); i.Next(); } Console.ReadLine(); }

總結:訪問聚集對象,不管該對象是什麽,需要遍歷的時候,就使用叠代器。
叠代器模式:為聚集提供開始、下一個、是否結束、當前處於哪一項的統一的接口。
C#的集合什麽的已經在內部實現了叠代器。
foreach(string item in a)
{
console.write("當前{0}",item);
}的內部實現其實是:
IEnumerator<string> e=a.GetEnumerator();
while(e.Next())
{
console.write("當前{0}",e.Current);
}

設計模式-叠代器模式