迭代器模式
定义:
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露改对象的内部表示。
使用环境:
当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候。
需要对聚集有多种方式遍历时。
表现:
为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。
高级编程语言本身已经把这个模式包含在语言中了。例如:foreach in、IEnumerable接口。
学习价值远远大于实用价值。
结构图:
ConcreteIterator:
ConcreteAggregate:
客户端:
注:
为什么用具体的迭代器ConcreteIterator来实现抽象的Iterator?不需要抽象,直接访问ConcreteIterator?
当需要对聚集有多种方式遍历,使用抽象类,修改方便。
ConcreteIteratorDesc:
客户端修改:
.NET中的实现:
IEumerator,支持对非泛型集合的简单迭代接口。
IEnumerable,公开枚举数。改枚举数支持在非泛型集合上进行简单迭代。
例如, foreach in的应用:尽管不需要显式的引用迭代器,但是系统本身还是通过迭代器来遍历实现的
编译器的工作:
原理:
分离了集合对象的遍历行为,抽象出一个迭代器来负责。这样皆可以做到不暴露结合的内部结构,又可让外部代码透明底访问集合内部的数据。
迭代器模式在访问数组、集合、列表等数据时,尤其是数据库数据操作时,是非常普遍的应用,且各种高级语言都对它进行了封装。
扩展:
研究历史是为了更好地迎接未来。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?