迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
迭代器模式的结构图如下:
迭代器代码模板
//Iterator 迭代器抽象类
class Iterator
{
public:
virtual object First();
virtual object Next();
virtual object IsDone();
virtual object CurrentItem();
};
//Aggregate 聚集抽象类
class Aggregate
{
public:
Iterator CreateIterator();//创建迭代器
};
//ConcreteIterator具体迭代器类,继承Iterator
class ConcreteIterator
{
private:
ConcreteAggregate aggregate;
int current = 0;
public:
ConcreteIterator(ConcreteAggregate aggregate )
{
this.aggregate = aggregate;
}
object First()
{
return aggregate[0];
}
object Next()
{
object ret =null;
current++;
if(current < aggregate.Count)
{
ret = aggregate[current];
}
return ret;
}
bool IsDone()
{
return current >= aggregate.Count ? true:false;
}
object CurrentItem()
{
return aggregate[current];
}
};
//ConcreteAggregate具体聚集类 继承Aggregate
class ConcreteAggregate:public Aggregate
{
private:
IList<object> items = new List<object>();
public:
Iterator CreateIterator()
{
return new ConcreteIterator(this);
}
int Count()
{
return items.Count;
}
object this[int index]
{
items.Insert(index,value);
return items[index];
}
};
//客户端代码
void main()
{
ConcreteAggregate a = new ConcreteAggregate ();
a[0] = "大鸟";
a[1] = "小菜";
a[2] = "行李";
a[3] = "老外";
a[4] = "公交内部员工";
a[5] = "小偷";
Iterator i = newConcreteIterator(a);
object item = i.First();
while(!i.IsDone())
{
cout<<i.CurrentItem()<<"请买车票";
i.Next();
}
}
迭代器(Iterator)模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,有可让外部代码透明地访问集合内部数据。
迭代器好处:可以实现对聚集多种方式遍历。