// 定义:提供一种方法顺序当问一个聚合对象中的各个元素,而不
//     暴露该对象的内部表示
//
// 模式举例:
//
// 模式特点:
//
//#include<iostream>
#include<string>
#include<vector>
using namespace std;//迭代器
class Iterator
{
public:virtual string first()=0;virtual string next()=0;virtual string getCur()=0;virtual bool isEnd()=0;
};//pop肯定要是弹出元素啦!!!//聚合对象
class Aggregate
{
public:virtual void push(string s)=0;virtual string pop(int pos)=0;virtual string getValue(int pos)=0;virtual int count()=0;virtual Iterator * createIterator()=0;
};class ConcreteIterator : public Iterator
{
public:ConcreteIterator(Aggregate *a){m_aggregate = a;m_curPos = 0;}virtual string first(){return m_aggregate->getValue(0);}virtual string next(){m_curPos ++;if(m_curPos < m_aggregate->count()){return m_aggregate->getValue(m_curPos);}else{return "";}}virtual string getCur(){return m_aggregate->getValue(m_curPos);}virtual bool isEnd(){return m_curPos==m_aggregate->count();}private:Aggregate * m_aggregate;int         m_curPos;
};class ConcreteAggregate : public Aggregate
{
public:ConcreteAggregate(){m_iter = NULL;}virtual void push(string s){m_strvec.push_back(s);}virtual string pop(int pos){string str = m_strvec[pos];m_strvec.erase(pos);return str;}virtual string getValue(int pos){return m_strvec[pos];}virtual int count(){return m_strvec.size();}virtual Iterator * createIterator(){if(m_iter==NULL){m_iter = new ConcreteIterator(this);}return m_iter;}private:vector<string>  m_strvec;Iterator *      m_iter;
};int main()
{Aggregate * pAggregate = new ConcreteAggregate();Iterator * iter = pAggregate->createIterator();pAggregate->push("test1");pAggregate->push("test2");pAggregate->push("test3");while(!iter->isEnd()){cout<<iter->getCur()<<endl;iter->next();}return 0;
}

3_4 IteratorMode 迭代器模式相关推荐

  1. 你知道迭代器模式吗?

    迭代器模式 一.迭代器模式 二.举例 自定义迭代器 Java内置迭代器 一.迭代器模式 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 二.举例 合并一个餐厅菜单和煎饼屋菜单, ...

  2. 设计模式之迭代器模式(Iterator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  3. 设计模式笔记(18)---迭代器模式(行为型)

    Gof定义 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露该对象的内部表示. 动机 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可 ...

  4. 21Iterator(迭代器)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.Iterator(迭代器)模式动机 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以 ...

  5. 迭代器模式(Iterator pattern)

    一. 引言 迭代这个名词对于熟悉Java的人来说绝对不陌生.我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator(); w ...

  6. 设计模式(十五):Iterator迭代器模式 -- 行为型模式

    1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用 ...

  7. 设计模式学习总结-迭代器模式(Iterator Pattern)

    问题: 在面向对象的软件设计中,经常会遇到一些聚集对象,按一定的顺序的遍历访问问题,这个遍历算法究竟应该由谁来实现呢,聚集对象本身?这样聚集对象承受了过多的功能,不仅要维护聚集对象内的元素,还要提供遍 ...

  8. 结合项目实例 回顾传统设计模式(九)迭代器模式

    关于迭代器模式,我们所需要知道的第一件事情就是它依赖于一个名为迭代器的接口.一旦我们有了这个接口,就可以为各种那个对象集合实现迭代器:数组.列表.散列表. 项目实例我们就拿用户角色模块来举例 背景 1 ...

  9. java迭代器的使用场景_集合遍历利器 -- 迭代器模式 介绍 使用场景案例 优缺点及程序演示...

    一句话概括: 顺序访问集合对象的元素,不需要知道集合对象的底层表示. 补充介绍: 迭代器模式(Iterator Pattern)相信大家都已经见过不少次了,当你学习Java或者其他编程语言的开始你就会 ...

最新文章

  1. 【TX2】安装NVIDIA SDK Manager(JetPack 4.6)后,下载kernel和u-boot源码
  2. 关于MySQL的四种事务隔离级别!
  3. matlab最小二乘法参数辨识,基于最小二乘法的MATLAB辨识仿真实验
  4. 实战!聊聊如何解决MySQL深分页问题
  5. OpenGL ES之GLSL实现仿抖音“缩放”“灵魂出窍”“抖动”“闪白”“毛刺”“幻觉”等动态滤镜效果
  6. Shell(7)——case
  7. 卡特兰数的性质及其应用扩展
  8. 第七十三期:比特币迎来新的替代技术,能耗几乎为零!
  9. Qt 【关于控件样式,鼠标进入、离开、点击】
  10. 名企笔试:京东 2016 算法工程师笔试题(登楼梯)
  11. XSS后台敏感操作(审计思路实现)
  12. qt creator纯C或C++项目在windows下的命令行中文乱码解决
  13. logistic回归详解(二):损失函数(cost function)详解
  14. Axure RP for Mac中文汉化破解版
  15. 什么是数字证书?数字证书在哪办理?
  16. BlackBerry 黑莓 7230 7290 快捷键
  17. 关于word粘贴图片显示不全的解决办法
  18. 算法效率的衡量方式 - 时间复杂度与空间复杂度
  19. MFC 控件大小随窗体改变而改变大小-OnSize
  20. 学习了pr后的收获_我的PR小结

热门文章

  1. 编码引出的问题_FileReader读取GBK格式的文件
  2. 使用try_catch_finally处理流中的异常
  3. 字符串的比较相关方法
  4. SocketIO-nio
  5. fortran和Java学_Fortran模块和全局变量
  6. oracle 创建表中又有表,oracle创建表
  7. 手机照片导入电脑步骤_怎样把手机里的照片传到电脑里
  8. python寻找列表最大值最小值及其下标
  9. pd.get_dummies()
  10. Linux下输出不同颜色的字体详解