名称:迭代器模式
意图:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
适用环境:
1、访问一个取合对象的内容而无需暴露它的内部表示。
2、支持对聚合对象的多种遍历。
3、为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。
abstractclassAggregate
{
publicabstractIteratorCreateIterator();
}
classConcreteAggregate: Aggregate
{
privateArrayList_items = newArrayList();
publicoverrideIteratorCreateIterator()
{
returnnewConcreteIterator(this);
}
publicintCount
{
get{ return_items.Count; }
}
publicobjectthis[intindex]
{
get{ return_items[index]; }
set{ _items.Insert(index, value); }
}
}
abstractclassIterator
{
publicabstractobjectFirst();
publicabstractobjectNext();
publicabstractboolIsDone();
publicabstractobjectCurrentItem();
}
classConcreteIterator: Iterator
{
privateConcreteAggregate_aggregate;
privateint_current = 0;
publicConcreteIterator(ConcreteAggregateaggregate)
{
this._aggregate = aggregate;
}
publicoverrideobjectFirst()
{
return_aggregate[0];
}
publicoverrideobjectNext()
{
objectret = null;
if(_current < _aggregate.Count - 1)
{
ret = _aggregate[++_current];
}
returnret;
}
publicoverrideobjectCurrentItem()
{
return_current >= _aggregate.Count;
}
publicoverrideboolIsDone()
{
return_current >= _aggregate.Count;
}
}
调用:
ConcreteAggregatea = newConcreteAggregate();
a[0] = "Item A";
a[1] = "Item B";
a[2] = "Item C";
a[3] = "Item D";
ConcreteIteratori = newConcreteIterator(a);
Console.WriteLine("Iterating over collection:");
objectitem = i.First();
while(item != null)
{
Console.WriteLine(item);
item = i.Next();
}
输出:
Iterating over collection:
Item A
Item B
Item C
Item D