设计模式之迭代器模式
来源:互联网 发布:网络神曲排行榜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;}【运行结果】
- 设计模式之迭代器模式
- 设计模式之 迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之--迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之-迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式 之 迭代器模式
- 设计模式 之 迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- Oracle中不同用户间数据的导入导出
- Android显示系统之View与SurfaceView更新屏幕的区别
- O(n)时间的排序---计数排序
- HDU 3309
- C和C++中sizeof的细节问题
- 设计模式之迭代器模式
- C语言 字符串基本操作篇
- linux网络编程——多路复用epoll模型简例
- <漫谈设计模式>======对象创建型模式之创建者模式
- linux时钟浅析
- 面向对象设计原则
- 使用TextMate打开GB2312,BIG等亚洲编码文件
- USACO 蔡勒公式 (计算任何一日属一星期中哪一日的算法)
- javascript中几种页面跳转方式