迭代器模式
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示
迭代器实现
聚合抽象类、具体聚集类、迭代抽象类、具体迭代器(继承迭代抽象类,实现开始,下一个,是否结尾,当前对象等方法)
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();
}
}