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

设计目的:

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

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

  • 如果它是数组 ,你需要用 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 也是类似思想

相关推荐
Larcher2 天前
AI Loop:让AI像人一样自主完成任务的核心机制
javascript·人工智能·设计模式
咖啡八杯3 天前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
闪闪发亮的小星星3 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq3 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
阿米亚波3 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
自传.3 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding
:mnong3 天前
学习创建结构行为设计模式
设计模式
.千余3 天前
【C++】模板进阶全解:非类型参数|全特化|偏特化|分离编译完全指南
开发语言·c++·笔记·学习·其他
自传.3 天前
尚硅谷 Vibe Coding|第二章 AI编程工具生态 学习笔记
笔记·学习·ai编程·尚硅谷·vibe coding