迭代器模式Iterator Pattern
定义:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
适用场景:
1)访问一个聚合对象的内容而无需暴露它的内部表示,
2)支持对聚合对象的多种遍历,
3)为遍历不同的聚合结构提供一个统一的接口。
迭代器模式的类结构图:
兑现代码:
#include <iostream>
using namespace std;
typedef int Object;
#define SIZE 5
class 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;
}