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

设计目的:

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

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

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

相关推荐
我爱cope1 小时前
【Agent智能体11 | 反思设计模式-评估反射的影响的方法】
人工智能·设计模式·语言模型·职场和发展
不羁的木木1 小时前
Form Kit(卡片开发服务)学习笔记03-卡片UI开发与数据更新
笔记·学习·ui
不羁的木木1 小时前
Form Kit(卡片开发服务)学习笔记02-环境搭建与基础配置
笔记·学习·harmonyos
土狗TuGou2 小时前
SQL内功笔记 · 第5篇:SQL逻辑执行顺序
数据库·笔记·后端·sql·mysql
Zklys2 小时前
Cmake的学习笔记step1
c++·笔记·学习
飞翔中文网2 小时前
Java学习笔记之接口
java·笔记·学习
雪之下雪乃的代码日记2 小时前
认识Java中集合框架
java·开发语言·笔记
MMT09212 小时前
OSPF笔记
笔记
道亦无名2 小时前
windows下杀死僵尸进程命令
笔记