迭代器模式的作用:一个一个地遍历集合中的元素。
迭代器模式使得对集合中元素的访问更加具有一致性。
示例代码如下:
#include<iostream>
using namespace std;
//迭代器模式
//参见STL中迭代器设计理念
typedef int Object;
#define SIZE 5
class MyIterator
{
public:
virtual void First()=0;
virtual void Next()=0;
virtual bool IsDone()=0;
virtual Object CurrentItem()=0;
virtual ~MyIterator(){}
};
class Aggregate
{
public:
virtual MyIterator* CreateIterator()=0;
virtual Object GetItem(int index)=0;
virtual int GetSize()=0;
virtual ~Aggregate(){}
};
class ConcreteIterator:public MyIterator
{
public:
ConcreteIterator(Aggregate* aggregate )
{
m_aggregate = aggregate;
}
virtual void First()
{
m_index = 0;//让当前 游标 回到位置0
}
virtual void Next()
{
if(m_index<m_aggregate->GetSize())
{
m_index++;
}
}
virtual bool IsDone()
{
return m_index<m_aggregate->GetSize();
}
virtual Object CurrentItem()
{
return m_aggregate->GetItem(m_index);
}
private:
int m_index;
Aggregate* m_aggregate;
};
class ConcreteAggregate:public Aggregate
{
public:
ConcreteAggregate()
{
for(int i=0;i<SIZE;++i)
{
object[i]=i+100;
}
}
virtual MyIterator* CreateIterator()
{//让迭代器拥有一个该集合的引用
return new ConcreteIterator(this);
}
virtual Object GetItem(int index)
{
return object[index];
}
virtual int GetSize()
{
return SIZE;
}
private:
Object object[SIZE];
};
int main()
{
Aggregate* pAggregate=new ConcreteAggregate();
MyIterator* pIterator=pAggregate->CreateIterator();
for(pIterator->First();pIterator->IsDone();pIterator->Next())
{
cout<<pIterator->CurrentItem()<<endl;;
}
delete pAggregate;
delete pIterator;
return 0;
}
执行程序,运行结果如下图所示: