#region 迭代器模式 interface Iterator { object First(); bool MoveNext(); object CurrentItem(); } class ConcreteIterator : Iterator { private ConcreteAggregate concreteAggregate; private int current = -1; public ConcreteIterator(ConcreteAggregate cAggreget) { concreteAggregate = cAggreget; } public object First() { return concreteAggregate[0]; } public bool MoveNext() { if (++current < concreteAggregate.Count) { return true; } else { return false; } } public object CurrentItem() { return concreteAggregate[current]; } } abstract class Aggregate { public abstract Iterator CreateIterator(); } class ConcreteAggregate : Aggregate { private List<object> items = new List<object>(); public override Iterator CreateIterator() { return new ConcreteIterator(this); } public int Count { get { return items.Count; } } public object this[int index] { get { return items[index]; } set { if (index >= items.Count) { items.Insert(index,value); } else { items[index]=value; } } } } #endregion class Program { static void Main(string[] args) { #region 迭代器模式 Console.WriteLine("迭代器模式效果演示:"); ConcreteAggregate conAggregate = new ConcreteAggregate(); conAggregate[0] = "猥琐男1号"; conAggregate[1] = "猥琐男2号"; conAggregate[2] = "小偷"; conAggregate[3] = "内部员工"; conAggregate[4] = "靓女"; Iterator it = conAggregate.CreateIterator(); //Iterator it = new ConcreteIterator(conAggregate); while (it.MoveNext()) { Console.WriteLine("{0},请买票", it.CurrentItem().ToString()); } #endregion } }