迭代器提供了一种方法顺序访问一个聚合对象,而不暴露对象的内部细节 。net中的foreach就是典型的迭代器模式
图示:
代码:
车上售票员对乘客售票
class Program { static void Main(string[] args) { ConcreteAggregate a = new ConcreteAggregate(); a[0] = "大鸟"; a[1] = "xiao菜"; a[2] = "行李"; a[3] = "老外"; a[4] = "内部员工"; a[5] = "小偷"; Iterator i = new ConcreteIterator(a); object item = i.First(); while (!i.IsDone()) { Console.WriteLine("{0}请买车票!",i.CurrentItem()); i.Next(); } Console.Read(); } } //抽象迭代器类 abstract class Iterator { public abstract object First(); public abstract object Next(); public abstract bool IsDone(); public abstract object CurrentItem(); } //聚合抽象类 abstract class Aggregate { public abstract Iterator createIterator(); //创建迭代器 } //具体迭代器类 class ConcreteIterator : Iterator { private ConcreteAggregate aggregate; private int current = 0; public ConcreteIterator(ConcreteAggregate aggregate) { this.aggregate = aggregate; } public override object First() { //throw new NotImplementedException(); return aggregate[0]; } public override object Next() { //throw new NotImplementedException(); object ret = null; current++; if (current < aggregate.Count) { ret = aggregate[current]; } return ret; } public override bool IsDone() { //throw new NotImplementedException(); return current >= aggregate.Count ? true : false; } public override object CurrentItem() { //throw new NotImplementedException(); return aggregate[current]; } } class ConcreteAggregate : Aggregate { //声明一个IList 泛型变量 用来存放聚合对象 private IList<object> items=new List<object>(); public override Iterator createIterator() { //throw new NotImplementedException(); 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); } } }
原文:http://blog.csdn.net/buyingfei8888/article/details/21699663