设计模式 - 迭代器模式 笔记

设计目的:

提供一种方法顺序访问一个聚合对象(如数组、链表、树)中的各个元素,而又不需要暴露该对象的内部表示。

没有迭代器模式之前,如果你想遍历一个集合,你必须知道这个集合的底层结构。

  • 如果它是数组 ,你需要用 for (int i=0; i<len; i++)

  • 如果它是链表 ,你需要通过 node.next 来遍历。

  • 如果它是树结构,你可能需要写复杂的递归深度优先或广度优先遍历。

客户端代码如果与集合的内部结构紧密耦合。如果哪天你想把底层的数组改成链表,所有遍历它的代码都得跟着改。有了迭代器就可以让你在不明确集合类型时先写好代码,消除变更顾虑。


核心结构

  • 迭代器接口 :声明 hasNext()next() 等遍历方法。

  • 具体迭代器:实现遍历算法,记录当前位置。

  • 集合接口 :声明 createIterator() 工厂方法。

  • 具体集合:返回对应的具体迭代器实例。

工作方式 :客户端通过集合接口获取迭代器,然后循环调用 hasNext()next() 访问元素,完全解除了客户端与集合内部结构的耦合。


迭代器模式是现代编程语言中的"内置公民",foreach 就是迭代器模式的语法糖:

  • Javajava.util.Iterator 接口,foreach 语法糖会编译成 while(iterator.hasNext())

  • C#IEnumerator 接口,foreach 直接依赖它

  • Python :迭代器协议(__iter____next__),for in 循环底层就是调用它

  • JavaScriptSymbol.iterator 协议,for...of 循环使用它

  • RustIterator trait,for 循环会自动调用 into_iter()

  • Go :虽然没泛型迭代器,但 for range 对 slice/map/channel 也是类似思想

相关推荐
chnyi6_ya9 分钟前
论文阅读笔记 | The Script is All You Need: 对话到电影级视频生成的 Agentic 框架
论文阅读·笔记
听雨入夜24 分钟前
CMake构建学习笔记-libxml库的构建
笔记·学习
iiiiii1137 分钟前
【论文阅读笔记】Reparameterization Proximal Policy Optimization (RPO):将PPO的稳定性引入可微分强化学习
论文阅读·人工智能·笔记·深度学习·机器学习·机器人·具身智能
小白说大模型1 小时前
Python 工程化设计模式:AI 项目中的异步流水线与策略模式实战
人工智能·python·设计模式
鱼子星_2 小时前
【C++】深入剖析list:list及其双向迭代器实现
开发语言·数据结构·c++·笔记·stl·list
砚凝霜2 小时前
软考网络工程师|第 4 章 WLAN MAC 机制、Ad Hoc、无线安全、WPAN 蓝牙 ZigBee 完整备考笔记
网络·笔记·安全
江屿风2 小时前
【C++笔记】【二叉搜索树】流食般投喂
开发语言·数据结构·c++·笔记
choumin4 小时前
行为型模式——中介者模式
c++·设计模式·中介者模式·行为型模式
xqqxqxxq5 小时前
AI智能旅游规划系统 - 前端技术笔记
前端·笔记·旅游
摇滚侠12 小时前
《RocketMQ 官网》阅读笔记 RocketMQ 普通消息 延时消息 顺序消息 事务消息
笔记·rocketmq