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

迭代器模式

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

迭代器实现

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

  

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);
  }

}
//client
static 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();
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值