c++设计模式之迭代器模式

来源:互联网 发布:电脑如何连接手机网络 编辑:程序博客网 时间:2024/06/07 17:36

迭代器模式Iterator Pattern

定义:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

适用场景:
1)访问一个聚合对象的内容而无需暴露它的内部表示,
2)支持对聚合对象的多种遍历,
3)为遍历不同的聚合结构提供一个统一的接口。

迭代器模式的类结构图:


兑现代码:

#include <iostream>using namespace std;typedef int Object;#define SIZE 5class Iterator//迭代器接口{public:virtual void First()=0;virtual void Next()=0;virtual bool IsDone()=0;virtual Object CurrentItem()=0;};class Aggregate//集合接口{public:virtual Iterator* CreateIterator()=0;virtual Object getItem(int index)=0;virtual int getSize()=0;};class ConcreteIterator :public Iterator//具体迭代器{public:ConcreteIterator(Aggregate*ag){_ag = ag;_current_index=0;}void First(){_current_index = 0;//让当前的游标回到初始位置}void Next(){if(_current_index <_ag->getSize())_current_index++;}bool IsDone(){return _current_index == _ag->getSize();}Object CurrentItem(){return _ag->getItem(_current_index);}private:int _current_index;Aggregate *_ag;};class ConcreteAggregate:public Aggregate  //具体集合{public:ConcreteAggregate(){for(int i=0;i<SIZE;i++){object[i]=i+100;}}Iterator* CreateIterator()//让迭代器 持有一个具体集合的引用{return new ConcreteIterator(this);}Object getItem(int index){return object[index];}int getSize(){return SIZE;}private:Object object[SIZE];};int main(){Aggregate *ag = new ConcreteAggregate();Iterator *it = ag->CreateIterator();for(;!(it->IsDone());it->Next()){cout<<it->CurrentItem()<<endl;}delete it;delete ag;    getchar();    return 0;}


0 0