我与C++设计模式(二十一)——迭代器模式
来源:互联网 发布:自学javascript要多久 编辑:程序博客网 时间:2024/05/29 16:52
迭代器模式,不用过多的介绍,迭代器在STL中是极具重要地位的。迭代器模式是用来解决对一个对象集合进行遍历的问题,将对集合的遍历封装成类,避免过多暴露。
UML图:
感觉比预想的要复杂。
代码:
#ifndef _AGGREGATE_H__#define _AGGREGATE_H__class Iterator;typedef int object;class aggregate{ public: virtual ~aggregate(); virtual Iterator *create_Iterator() = 0; virtual object get_item(int) = 0; virtual int get_size() = 0; protected: aggregate();};class concrete_aggregate:public aggregate{ public: enum{SIZE = 3}; concrete_aggregate(); ~concrete_aggregate(); Iterator *create_Iterator(); object get_item(int); int get_size(); private: object _obj[SIZE];};#endif
#ifndef _AGGREGATE_H__#define _AGGREGATE_H__class Iterator;typedef int object;class aggregate{ public: virtual ~aggregate(); virtual Iterator *create_Iterator() = 0; virtual object get_item(int) = 0; virtual int get_size() = 0; protected: aggregate();};class concrete_aggregate:public aggregate{ public: enum{SIZE = 3}; concrete_aggregate(); ~concrete_aggregate(); Iterator *create_Iterator(); object get_item(int); int get_size(); private: object _obj[SIZE];};#endifAdministrator@5guo-PC ~/pattern23/iterator$ cat aggregate.cpp//aggregate.cpp#include "aggregate.h"#include "iterator.h"aggregate::aggregate(){}aggregate::~aggregate(){}concrete_aggregate::concrete_aggregate(){ for (int i = 0; i < SIZE; ++i) _obj[i] = i;}concrete_aggregate::~concrete_aggregate(){}Iterator *concrete_aggregate::create_Iterator(){ return new concrete_Iterator(this);}object concrete_aggregate::get_item(int index){ if (index < get_size()) return _obj[index]; else return -1;}int concrete_aggregate::get_size(){ return SIZE;}
#ifndef _ITERATOR_H__#define _ITERATOR_H__class aggregate;typedef int object;class Iterator{ public: virtual ~Iterator(); virtual void first() = 0; virtual void next() = 0; virtual bool is_done() = 0; virtual object current_item() = 0; protected: Iterator();};class concrete_Iterator:public Iterator{ public: concrete_Iterator(aggregate *,int index = 0); ~concrete_Iterator(); void first(); void next(); bool is_done(); object current_item(); private: aggregate *_p_ag; int _idx;};#endif
//Iterator.cpp#include "aggregate.h"#include "Iterator.h"Iterator::Iterator(){}Iterator::~Iterator(){}concrete_Iterator::concrete_Iterator(aggregate *p_ag,int index) :_p_ag(p_ag),_idx(index){}concrete_Iterator::~concrete_Iterator(){}object concrete_Iterator::current_item(){ return _p_ag->get_item(_idx);}void concrete_Iterator::first(){ _idx = 0;}void concrete_Iterator::next(){ if (_idx < _p_ag->get_size()) ++_idx;}bool concrete_Iterator::is_done(){ return _idx == _p_ag->get_size();}
//main.cpp#include "Iterator.h"#include "aggregate.h"#include <iostream>using namespace std;int main(int argc,char **argv){ aggregate *p_ag = new concrete_aggregate(); Iterator *p_ite = new concrete_Iterator(p_ag); for ( ; !(p_ite->is_done()); p_ite->next()) cout<<p_ite->current_item()<<endl; return 0;}
0 0
- 我与C++设计模式(二十一)——迭代器模式
- 设计模式(二十一)——中介者模式
- 设计模式—中介者模式(二十一)
- 我与C++设计模式(十一)——代理模式
- 《Android源码设计模式解析与实战》读书笔记(二十一)——装饰者模式
- 设计模式(二十一)---组合模式
- 设计模式(二十一) 状态模式
- 设计模式讲解与代码实践(二十一)——状态
- 行为型:设计模式之迭代器模式(二十一)
- JAVA设计模式(二十一)——状态模式
- 设计模式学习笔记(二十一)—Composite模式
- 设计模式——迭代器与组合模式(二)
- 我与C++设计模式(二十)——职责链模式
- 我与C++设计模式(二十二)——解释者模式
- 设计模式(二十一)------23种设计模式(13):迭代器模式
- Java面向对象设计模式(二十一)——访问者模式(Visitor)
- 设计模式笔记(二十一) —— 中介者模式
- 云计算设计模式(二十一)——Sharding分片模式
- Eclipse打开java文件
- 多张图片合成一张图片(alpha混合)
- qstringlist 迭代风格
- xml
- openCV2 的精髓——深入讲解Mat原理(非如何使用)
- 我与C++设计模式(二十一)——迭代器模式
- Linux中的shift命令
- 【胡逼蛋砍】——上
- Add Binary
- 输入时间,输入下一秒时间
- html中怎么将标签左对齐,而文本框右对齐的方法
- struts学习之入门级
- Merge Two Sorted Lists
- 数组中的逆序对