迭代器模式,提供一种方法顺序访问一个聚合对象中各个元素,而不暴露该对象的内部表示。该模式很好理解,C++中的迭代器应该都用过,和那个差不多。
迭代器模式的UML类图:
1.迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。
2.具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。
3.集合角色(Aggregate):集合角色负责提供创建具体迭代器角色的接口。
4.具体集合角色(Concrete Aggregate):具体集合角色实现创建具体迭代器角色的接口——这个具体迭代器角色于该集合的结构相关
#include <iostream>
using namespace std;
// 迭代器
class IteratorBase
{
public:
virtual void first() = 0;
virtual void next() = 0;
virtual bool isDone() = 0;
virtual int currentItem() = 0;
};
class Aggregate
{
protected:
int a[10];
public:
virtual IteratorBase* CreateIter()=0;
virtual int getIt(int index)=0;
virtual int getSize()=0;
};
class MyIterator : public IteratorBase
{
public:
MyIterator(Aggregate *A){
ag=A;
}
public:
virtual void first() {
index=0;
}
virtual void next(){
index++;
}
virtual bool isDone(){
return (index==ag->getSize());
}
virtual int currentItem() {
return ag->getIt(index);
}
private:
int index;
Aggregate *ag;
};
class AggregateA :public Aggregate{
public:
virtual IteratorBase* CreateIter(){
return new MyIterator(this);
}
virtual int getIt(int index){
return a[index];
}
virtual int getSize(){
return 10;
}
};
int main(){
Aggregate *ag =new AggregateA();
IteratorBase * it=ag->CreateIter();
for (it->first();!(it->isDone());it->next()){
cout<<it->currentItem()<<" ";
}
return 0;
}