设计模式-迭代器模式
来源:互联网 发布:物联网书籍推荐 知乎 编辑:程序博客网 时间:2024/04/28 02:52
定义
迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
场景:我们有两个聚合A和B,有一个聚合管理的类,包含聚合A和B,而这个管理类的功能就是依次遍历它所包含的聚合中的元素并打印到控制台上。每个聚合中的元素存放的方式是不同的,有的用的是数组,有的可能是vector或者list等,因此我为每个聚合定义了一个迭代器,管理类只需要依次获取各聚合的迭代器,使用迭代器去遍历其中的元素,而不需要去理会聚合中元素的存放方式。
类图:
代码:
#include "stdafx.h"#include <iostream>#include <vector>using namespace std;#define COUNT 5/// <summary>///遍历迭代器抽象类/// </summary>class Iter{public:virtual bool HasNext() = 0;virtual int GetNext() = 0;};class Menu{public:virtual Iter* CreateIter() = 0;};class AIter : public Iter{public:AIter::AIter(vector<int> vData){m_iPosition = 0;for (int i=0; i<vData.size(); ++i){m_vData.push_back(vData.at(i));}}bool AIter::HasNext(){if (m_iPosition < m_vData.size()){return true;}else{return false;}}int AIter::GetNext(){int iData = m_vData.at(m_iPosition);++m_iPosition;return iData;}private:vector<int> m_vData;int m_iPosition;};class BIter : public Iter{public:BIter::BIter(int* piData){m_iPosition = 0;for (int i=0; i<COUNT; ++i){m_iData[i] = piData[i];}}bool BIter::HasNext(){if (m_iPosition < COUNT){return true;}else{return false;}}int BIter::GetNext(){int iData = m_iData[m_iPosition];++m_iPosition;return iData;}private:intm_iPosition;intm_iData[COUNT];};class A : public Menu{public:A::A(){for (int i=0; i<COUNT; ++i){m_vData.push_back(i*(i+1));}}Iter* A::CreateIter(){return new AIter(m_vData);}private:vector<int> m_vData;};class B : public Menu{public:B::B(){for (int i = 0; i < COUNT; ++i){m_iData[i] = i*(i+1);}}Iter* B::CreateIter(){return new BIter(m_iData);}private:int m_iData[COUNT];};class Mgr{public:void Mgr::printAggr(){Iter* piter1 = m_aggrA.CreateIter();Iter* piter2 = m_aggrB.CreateIter();printAggr(piter1);printAggr(piter2);delete piter1;delete piter2;}void Mgr::printAggr(Iter* piter){while(piter->HasNext()){printf("%d\n",piter->GetNext());}}private:A m_aggrA;B m_aggrB;};int main(){Mgr aggrMg;aggrMg.printAggr();return 0;}
- 设计模式-迭代器模式
- 设计模式 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 【设计模式】迭代器模式
- 设计模式-迭代器模式
- 设计模式- 迭代器模式
- 设计模式 - 迭代器模式
- 设计模式:迭代器模式
- 设计模式 - 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 设计模式---迭代器模式
- 设计模式---迭代器模式
- 【设计模式】迭代器模式
- 设计模式 迭代器模式
- 设计模式--迭代器模式
- 设计模式-迭代器模式
- Flash Media Server 4.5入门—第六部分:初学者HTTP动态流技术向导
- linux distro timeline
- 支持HTML5的浏览器
- 广播驱动体系(BDA) 系列讲座:四
- 学习工具索引
- 设计模式-迭代器模式
- js的定时器
- SQL Server,Oracle,DB2索引建立语句的对比
- Berg Insight:2016年,全球七分之一的广告来自移动平台
- web框架之Spring-MVC环境搭建
- oracle 的伪列rownum,排序order by分析
- 广播驱动体系(BDA) 系列讲座:五
- android webkit HTML5 video研究
- 数据库索引类型 .