迭代器模式
1.迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。
2.具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。
3.集合角色(Aggregate):集合角色负责提供创建具体迭代器角色的接口。
4.具体集合角色(Concrete Aggregate):具体集合角色实现创建具体迭代器角色的接口——这个具体迭代器角色于该集合的结构相关。
#include <iostream> #include <vector> using namespace std; class Iterator { public: virtual void first()=0; virtual void next()=0; virtual int currentItem()=0; virtual bool isDone()=0; virtual ~Iterator(){} }; class ConcreteIterator : public Iterator <Item> { ConcreteAggregate* aggr; int cur; public: ConcreteIterator(ConcreteAggregate* a):aggr(a),cur(0){} virtual void first() { cur=0; } virtual void next() { if(cur<aggr->getLen()) cur++; } virtual int currentItem() { if(cur<aggr->getLen()) return &(*aggr)[cur]; else return NULL; } virtual bool isDone() { return (cur>=aggr->getLen()); } }; class Aggregate { public: virtual Iterator* createIterator()=0; virtual ~Aggregate(){} }; class ConcreteAggregate:public Aggregate { int data[100];//100 public: ConcreteAggregate() { for (int i = 0; i < 100; i++) data[i] = i; } virtual Iterator* createIterator() { return new ConcreteIterator(this); } int getItem(int index) { if(index<data.size()) return data[index]; else return -1; } int getLen() { return data.size(); } }; int main() { Aggregate* aggr =new ConcreteAggregate(); Iterator *it=aggr->createIterator(); for(it->first();!it->isDone();it->next()) { cout<<*(it->currentItem())<<endl; } delete it; delete aggr; return 0; }
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
浙公网安备 33010602011771号