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

设计目的:

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

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

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

相关推荐
小刘在重生~2 小时前
Java 异常体系完整笔记
java·笔记·python
泡泡鱼(敲代码中)2 小时前
Python语法技术学习笔记
开发语言·笔记·python·学习·pycharm
祁白_5 小时前
防御引擎绕过方法
笔记·web安全·php·防御引擎
志尊宝5 小时前
Vue3 零基础每日笔记(009):watch 侦听器——数据一变就“做事“
vue.js·笔记·缓存
噜~噜~噜~5 小时前
操作系统笔记-3.1.1.4 (选修)覆盖与交换
笔记·操作系统
2401_868534785 小时前
长远目标 Long-term Goal 老题沿用
设计模式·需求分析
志尊宝5 小时前
Vue3 零基础每日笔记(011):生命周期钩子——在正确的时间做正确的事
javascript·vue.js·笔记
prog_61035 小时前
【笔记】用cursor手搓cursor(十)
人工智能·笔记·大语言模型·agent
吃饱了得干活6 小时前
Java设计模式实战:一个支付模块的重构之旅,层层递进理解设计模式精髓
后端·设计模式·架构
浔溺7 小时前
al+大数据每日学习笔记36
大数据·笔记·学习