说明:迭代器模式可以看成是一个对象的集合,比如List<class>。提供增删,遍历集合里的元素。.NET中的GetEnumerator()就是迭代器模式的。
迭代器要1个类做聚合,1个类做迭代。聚合有Get迭代方法,具体对象集合(看当时需求),迭代器有MoveNext(),Reset(),Current()方法
实现:
/// <summary> /// 迭代器接口 /// </summary> public interface Iterator { bool MoveNext(); void Next(); void Reset(); object GetCurrent(); } /// <summary> /// 聚合对象接口 /// </summary> public interface IList_Num { Iterator GetIterator(); } /// <summary> /// 迭代器具体实现类 /// </summary> public class ConcreteIterator :Iterator { NumList numlist1; int index; public ConcreteIterator(NumList nl) { numlist1 = nl; index = 0; } public bool MoveNext() { if (index < numlist1.Length()) { return true; } return false; } public void Next() { if(index<numlist1.Length()) { index++; } } public void Reset() { index = 0; } public object GetCurrent() { return numlist1.GetElement(index); } } /// <summary> /// 聚合对象的具体实现类 /// </summary> public class NumList : IList_Num { int[] collection; public NumList() { collection =new int[] { 2, 3, 4, 5, 6 }; } public Iterator GetIterator() { return new ConcreteIterator(this); } public int GetElement(int Index) { return collection[Index]; } public int Length() { return collection.Length; } } public class test { public void start() { IList_Num num = new NumList(); Iterator iterator1=num.GetIterator(); while(iterator1.MoveNext()) { //遍历每个对象 iterator1.GetCurrent(); iterator1.Next(); } } }