迭代器模式----C++实现

2014-11-24 07:55:16 · 作者: · 浏览: 0

迭代器模式

定义:

提供一个方法顺心访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。

适用性:

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 * CreateIterator() = 0;

virtual~Agrregate() {}

};

template

class ConcreteIterator;

template

class ConcreteAgrregate:public Agrregate

{

public:

ConcreteAgrregate(){}

~ConcreteAgrregate(){}

Iterator * CreateIterator()

{

returnnew ConcreteIterator (this);

}

voidAddItem(Item val)

{

m_itemVec.push_back(val);

}

int Size()

{

returnm_itemVec.size();

}

voidRemoveItem(Item val)

{

vector ::iterator it =find(m_itemVec.begin(),m_itemVec.end(),val);

if(it != m_itemVec.end())

{

m_itemVec.erase(it);

}

}

Item& operator[](int index)

{

returnm_itemVec[index];

}

private:

vector m_itemVec;

};

template

class ConcreteIterator:public Iterator

{

public:

ConcreteIterator(ConcreteAgrregate *pAggregate):m_Aggregate(*pAggregate),m_curIndex(0)

{ }

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 m_Aggregate;

};

ConcreteAgrregate *pa = new ConcreteAgrregate ();

pa->AddItem(5);

pa->AddItem(15);

pa->AddItem(54);

pa->AddItem(65);

pa->AddItem(57);

pa->AddItem(59);

pa->AddItem(50);

cout<<"pasize :"< Size()<

Iterator *pit = pa->CreateIterator();

for(pit->First(); !pit->isDone(); pit->Next() )

{

cout< CurrentItem()<<" ";

}

cout<