迭代器模式-c++实现

来源:互联网 发布:腾讯云 centos pptp 编辑:程序博客网 时间:2024/06/11 00:18

最喜欢的一个设计模式终于实现了


// IteratorPattern.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <vector>using namespace std;template<class Iter>class Iterator{public:virtual void first() = 0;virtual void next() = 0;virtual Iter* currentItem() = 0;virtual bool isDone() = 0;virtual ~Iterator(){}};template<class Item>class ConcreteAggregate;template<class Item>class ConcreteIterator :public Iterator<Item>{private:ConcreteAggregate<Item> *aggr;int cur;public:ConcreteIterator(ConcreteAggregate<Item> *a):aggr(a),cur(0){}virtual void first(){cur = 0;}virtual void next(){if (cur < aggr->getLen())cur++;}virtual Item* currentItem(){if (cur < aggr->getLen())return &(*aggr)[cur];elsereturn NULL;}virtual bool isDone(){return (cur >= aggr->getLen());}};template<class Item>class Aggregate{public:virtual Iterator<Item>* createIterator() = 0;virtual ~Aggregate(){};};template<class Item>class ConcreteAggregate :public Aggregate<Item>{vector<Item> data;public:ConcreteAggregate(){data.push_back(1);data.push_back(2);data.push_back(3);}virtual Iterator<Item>* createIterator(){return new ConcreteIterator<Item>(this);}Item& operator[](int index){return data[index];}int getLen(){return data.size();}};int main(){Aggregate<int> *aggr = new ConcreteAggregate<int>();Iterator<int> *it = aggr->createIterator();for (it->first(); !it->isDone(); it->next()){cout << *(it->currentItem()) << endl;}delete it;delete aggr;    return 0;}


0 0
原创粉丝点击