本系列所有文章来自李建忠老师的设计模式笔记,系列如下:
设计模式(一)面向对象设计原则
23种设计模式(二)组件协作之模板方法
23种设计模式(三)组件协作之策略模式
23种设计模式(四)组件协作之观察者模式
23种设计模式(五)单一职责之装饰模式
23种设计模式(六)单一职责之桥模式
23种设计模式(七)对象创建之工厂方法
23种设计模式(八)对象创建之抽象工厂
23种设计模式(九)对象创建之原型模式
23种设计模式(十)对象创建之构建器
23种设计模式(十一)对象性能之单件模式
23种设计模式(十二)对象性能之享元模式
23种设计模式(十三)接口隔离之门面模式
23种设计模式(十四)接口隔离之代理模式
23种设计模式(十五)接口隔离之适配器
23种设计模式(十六)接口隔离之中介者
23种设计模式(十七)状态变化之状态模式
23种设计模式(十八)状态变化之备忘录
23种设计模式(十九)数据结构之组合模式
23种设计模式(二十)数据结构之迭代器
23种设计模式(二十一)数据结构之职责链
23种设计模式(二十二)行为变化之命令模式
23种设计模式(二十三)行为变化之访问器
23种设计模式(二十四)领域规则之解析器

文章目录

  • 动机
  • 模式定义
  • 代码
  • 要点总结

动机

  在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种”透明遍历“也为”同一种算法在多种集合对象上进行操作“提供了可能。

模式定义

  提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)该对象的内部表示。

代码

template<typename T>
class Iterator
{public:virtual void first() = 0;virtual void next() = 0;virtual bool isDone() const = 0;virtual T& current() = 0;
};template<typename T>
class MyCollection{public:Iterator<T> GetIterator(){//...}};template<typename T>
class CollectionIterator : public Iterator<T>{MyCollection<T> mc;
public:CollectionIterator(const MyCollection<T> & c): mc(c){ }void first() override {}void next() override {}bool isDone() const override{}T& current() override{}
};void MyAlgorithm()
{MyCollection<int> mc;Iterator<int> iter= mc.GetIterator();for (iter.first(); !iter.isDone(); iter.next()){cout << iter.current() << endl;}}

要点总结

  迭代抽象:访问一个聚合对象的内容而无需暴露它的内部表示。

  迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作。

  迭代器的健壮性考虑:遍历的同时更改迭代器所在的集合结构,会导致问题。

23种设计模式(二十)数据结构之迭代器相关推荐

  1. 23种设计模式(十四)模板方法模式(阁瑞钛伦特软件-九耶实训)

    常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法.抽象工厂.单例.建造者.原型 结构型模式7种:适配器.代理.桥接.装饰者.外观.享元.组合 行为型模式11种:模板方法.解释器. ...

  2. ULM图解 “23种设计模式”,及实例的类图

    UML图解设计模式 23种设计模式分为三大类 创建型模式(5种) 工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式 结构型模式(7种) 适配器模式 装饰模式 代理模式 外观模式 桥接模式 组 ...

  3. 23种设计模式(二十二)状态模式(阁瑞钛伦特软件-九耶实训)

    常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法.抽象工厂.单例.建造者.原型 结构型模式7种:适配器.代理.桥接.装饰者.外观.享元.组合 行为型模式11种:模板方法.解释器. ...

  4. 设计模式(二)23种设计模式

    设计模式(二)23种设计模式 文章目录 设计模式(二)23种设计模式 组件协作模式 策略模式 观察者模式 单一职责模式 Decorator模式 Bridge模式 对象创建模式 Factory Meth ...

  5. 23种设计模式 UML 类图及对应示例代码 (二)

    23种设计模式 UML 类图及对应示例代码 (二) 11.DoFactory.GangOfFour.Flyweight.Structural Flyweight:运用共享技术有效的支持大量细粒度的对象 ...

  6. 二十三种设计模式(第十二种)-----代理模式(Proxy)

    二十三种设计模式(第十二种)-----代理模式(Proxy) 尚硅谷视频连接https://www.bilibili.com/video/BV1G4411c7N4?from=search&se ...

  7. 23种设计模式-个人笔记(二)

    目录 五.23 种设计模式 1.单例模式 1.1.单例模式的定义与特点 1.2.单例模式的优点和缺点 1.3.单例模式的应用场景 1.4.单例模式的结构与实现 1.5.八种方式详解 1.6.单例模式在 ...

  8. 23种设计模式(二十三)访问者模式(阁瑞钛伦特软件-九耶实训)

    常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法.抽象工厂.单例.建造者.原型 结构型模式7种:适配器.代理.桥接.装饰者.外观.享元.组合 行为型模式11种:模板方法.解释器. ...

  9. 110.【十万字带你深入学习23种设计模式】

    Java 23种设计模式 (一).设计模式相关内容介绍 1.软件设计模式概述 (1).软件设计模式的产生背景 (2).软件设计模式的概念 (3).学习设计模式的重要性 (4).设计模式分类 2.UML ...

  10. 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

最新文章

  1. mysql5.6的安装步骤_MySQL5.6安装步骤
  2. DLL入门浅析(2)——如何使用DLL
  3. Django数据查询方法总结
  4. tomcat默认密码,admin,manager密码需要自己设置,tomcat-users.xml
  5. yolov5-6.0 出现Arial.ttf无法下载问题解决办法
  6. [ubuntu][原创]ubuntu18.04安装rabbitvcs正确方法
  7. 指数分布的样本和是充分统计量
  8. 复现awvs——POODLE 攻击(带 CBC 密码套件的 SSLv3—CVE-2014-3566)
  9. cesium 设置时间_Cesium 车辆跟踪事件气泡弹窗一直开启
  10. 智力开发(赛马问题)
  11. 移动端点击出现遮罩块效果
  12. PHP面试总结 v2018.08.24
  13. CVPR 2020 | 京东AI研究院对视觉与语言的思考:从自洽、交互到共生
  14. shell(9): shell脚本安装chajian
  15. 输入一个字符,判断其是否为大写字母,如果是,将他转换成小写字母;如果不是,不转换。然后输出最后得到的字符。
  16. 独立,做新世纪的好少年,无所畏惧
  17. c语言实现运输问题表上作业法,运输问题的表上作业法
  18. c语言计算机程序万年历论文,C语言万年历编程源程序
  19. 【高等数学】三.一元函数积分学
  20. 高级shell脚本编程之函数库、信号与陷进、文件处理、数组、安全性

热门文章

  1. 关于多线程编程您不知道的5 件事---有关高性能线程处理的微妙之处 (转)
  2. HCIE-RS面试--STP选举原理,状态机和接口角色
  3. 网络工程师HCIE-RS-路由回馈问题(通俗易懂!)
  4. 计算机网络网络层之路由算法
  5. 游戏开发筑基之特殊输入函数的妙用(C语言)
  6. HDOJ--2151--worm
  7. hdoj--2546--饭卡
  8. SpringCloud之 Feign的简单使用
  9. iOS学习资源(五)
  10. SQL时间相关 - SQL日期,时间比较(转)