迭代器模式
定义:
提供一个方法顺心访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。
适用性:
1、 访问一个聚合对象的内容而无需暴露它的内部表示。
2、 支持聚合对象的多种遍历
3、 为遍历不同的聚合结构提供一个统一的接口。
迭代器的作用:
1、 支持以不同的方式遍历一个聚合。
2、 迭代器简化了聚合的接口
3、 在同一个聚合上可以有多个遍历。
结构:

实现:
template
class Iterator
{
public:
virtual void First() = 0;
virtual void Next() = 0;
virtual bool isDone() = 0;
virtualItem CurrentItem() = 0;
};
template
class Agrregate
{
public:
virtualIterator
virtual~Agrregate() {}
};
template
class ConcreteIterator;
template
class ConcreteAgrregate:public Agrregate
{
public:
ConcreteAgrregate(){}
~ConcreteAgrregate(){}
Iterator
{
returnnew ConcreteIterator
}
voidAddItem(Item val)
{
m_itemVec.push_back(val);
}
int Size()
{
returnm_itemVec.size();
}
voidRemoveItem(Item val)
{
vector
if(it != m_itemVec.end())
{
m_itemVec.erase(it);
}
}
Item& operator[](int index)
{
returnm_itemVec[index];
}
private:
vector
};
template
class ConcreteIterator:public Iterator
{
public:
ConcreteIterator(ConcreteAgrregate
{ }
void First()
{
m_curIndex = 0;
}
void Next()
{
if (m_curIndex< m_Aggregate.Size() - 1)
{
++m_curIndex;
}
}
bool isDone()
{
if (m_curIndex== m_Aggregate.Size() - 1)
{
return true;
}
return false;
}
Item CurrentItem()
{
if (m_curIndex< m_Aggregate.Size())
{
returnm_Aggregate[m_curIndex];
}
}
private:
long m_curIndex;
ConcreteAgrregate
};
ConcreteAgrregate
pa->AddItem(5);
pa->AddItem(15);
pa->AddItem(54);
pa->AddItem(65);
pa->AddItem(57);
pa->AddItem(59);
pa->AddItem(50);
cout<<"pasize :"<
Iterator
for(pit->First(); !pit->isDone(); pit->Next() )
{
cout<
}
cout<
