设计模式之迭代器模式

来源:互联网 发布:网络神曲排行榜2017 编辑:程序博客网 时间:2024/04/29 17:02
【定义】迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

【场景】下面是一个Int型的数组,这里实现一个遍历该数组的迭代器。如果又有一个新的数组,而数组里面的数据是class Car,则实现一个class CarArray即可,迭代器类是基于模版的,即Array的数据类型是无关的。

【UML】

【代码】

/* *    Iterator.h */#ifndef __ITERATOR_H__#define __ITERATOR_H__#define MAX_DATA_NUM 0x20class IntArray;template<class T> class Iterator{public:virtual T get_first() = 0;virtual T get_next() = 0;};class IntIterator : public Iterator<int>{private:IntArray* intArray;int count;public:IntIterator(IntArray* i);int get_first();int get_next();};class IntArray{private:IntIterator* iterator;int data[MAX_DATA_NUM];public:friend class IntIterator;IntArray();~IntArray();IntIterator* get_iterator();};#endif
/* *    Iterator.cpp */#include <iostream>#include <vector>#include "Iterator.h"using namespace std;IntIterator::IntIterator(IntArray* i):intArray(i),count(0){}int IntIterator::get_first(){return intArray->data[0];}int IntIterator::get_next(){count++;if(count >= MAX_DATA_NUM) count = count%MAX_DATA_NUM;return intArray->data[count];}IntArray::IntArray(){for(int i = 0; i < MAX_DATA_NUM; i++){this->data[i] = i + 1;}iterator = new IntIterator(this);}IntArray::~IntArray(){delete this->iterator;}IntIterator* IntArray:: get_iterator(){return this->iterator;}int main(){Iterator<int>* iterator = NULL;IntArray* intArray = new IntArray();iterator = intArray->get_iterator();cout<<iterator->get_first()<<"   ";cout<<iterator->get_next()<<"   ";cout<<iterator->get_next()<<endl;delete intArray;return 0;}
【运行结果】