大话设计模式之迭代器模式

来源:互联网 发布:知乎笔记本推荐 编辑:程序博客网 时间:2024/05/29 18:22

迭代器模式

  提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示

迭代器实现

  聚合抽象类、具体聚集类、迭代抽象类、具体迭代器(继承迭代抽象类,实现开始,下一个,是否结尾,当前对象等方法)

  

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() {    return aggregate[0];  }  public override object Next() {    object ret = null;    current ++;    if(current < aggregate.Count) {      ret = aggregate[current];    }    return ret;  }   public override bool isDone(){     return current >= aggregate.Count ? true:false;   }   public override object CurrentItem(){     return aggregate[current];     }}class ConcreteAggregate : Aggregate {  private IList<object> items = new List<object>();  public override Iterator CreateIterator() {    return new ConcreteIterator(this);  }  public int Count;  //省略getset方法  public object this;  get (int index){  return items[index]  }   set (int index){  items.Add(index,value);  }}//clientstatic void Main(string[] args) {  ConcreteAggregate a = new ConcreteAggregate();  a[0] = "大鸟";  a[1] = "小菜";  //与Iterator i = new ConcreteIterator(a);等同  Iterator i = a.createIterator();  while(!i.isDone()) {    Console.WriteLine("{0}请买车票",i.currentItem());   i.Next();  }}

原创粉丝点击