news 2026/8/8 9:36:46

设计模式——迭代器模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
设计模式——迭代器模式

迭代器模式 (Iterator Pattern)

什么是迭代器模式?

迭代器模式是一种行为型设计模式,它允许你遍历集合对象中的元素,而不暴露集合的内部表示

简单来说:迭代器模式就是提供一个统一的接口来遍历不同的集合。

生活中的例子

想象一下:

  • 电视遥控器:上一个频道、下一个频道
  • 音乐播放器:上一首、下一首
  • 翻书:上一页、下一页

为什么需要迭代器模式?

传统方式的问题

// 客户端需要了解集合的内部结构for(inti=0;i<list.size();i++){System.out.println(list.get(i));}

问题

  1. 暴露内部:暴露了集合的内部结构
  2. 不统一:不同集合的遍历方式不同
  3. 难以扩展:新增集合类型需要修改客户端

迭代器模式的优势

// 使用迭代器Iteratoriterator=collection.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}

优势

  1. 统一接口:提供统一的遍历接口
  2. 隐藏内部:隐藏集合的内部结构
  3. 易于扩展:新增集合类型很容易

迭代器模式的结构

┌─────────────────────┐ │ Iterator │ 迭代器接口 ├─────────────────────┤ │ + hasNext(): boolean│ │ + next(): Object │ └──────────┬──────────┘ │ 实现 │ ┌──────────┴──────────┐ │ ConcreteIterator │ 具体迭代器 ├─────────────────────┤ │ - index: int │ │ - collection: Col │ │ + hasNext(): boolean│ │ + next(): Object │ └─────────────────────┘ ┌─────────────────────┐ │ Iterable │ 可迭代接口 ├─────────────────────┤ │ + iterator(): Iter │ └──────────┬──────────┘ │ 实现 │ ┌──────────┴──────────┐ │ ConcreteCollection │ 具体集合 ├─────────────────────┤ │ - elements: List │ │ + iterator(): Iter │ └─────────────────────┘

代码示例

1. 定义迭代器接口

/** * 迭代器接口 */publicinterfaceIterator{/** * 是否有下一个元素 */booleanhasNext();/** * 获取下一个元素 */Objectnext();}

2. 定义可迭代接口

/** * 可迭代接口 */publicinterfaceIterable{/** * 获取迭代器 */Iteratoriterator();}

3. 定义具体迭代器

/** * 具体迭代器 */publicclassConcreteIteratorimplementsIterator{privateList<Object>elements;privateintindex=0;publicConcreteIterator(List<Object>elements){this.elements=elements;}@OverridepublicbooleanhasNext(){returnindex<elements.size();}@OverridepublicObjectnext(){if(hasNext()){returnelements.get(index++);}returnnull;}}

4. 定义具体集合

/** * 具体集合 */publicclassConcreteCollectionimplementsIterable{privateList<Object>elements=newArrayList<>();publicvoidadd(Objectelement){elements.add(element);}@OverridepublicIteratoriterator(){returnnewConcreteIterator(elements);}}

5. 使用迭代器

/** * 迭代器模式测试类 * 演示如何使用迭代器模式遍历集合 */publicclassIteratorTest{publicstaticvoidmain(String[]args){System.out.println("=== 迭代器模式测试 ===\n");// 创建集合ConcreteCollectioncollection=newConcreteCollection();collection.add("元素1");collection.add("元素2");collection.add("元素3");collection.add("元素4");collection.add("元素5");// 使用迭代器遍历System.out.println("--- 使用迭代器遍历 ---");Iteratoriterator=collection.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}System.out.println("\n=== 迭代器模式的优势 ===");System.out.println("1. 统一接口:提供统一的遍历接口");System.out.println("2. 隐藏内部:隐藏集合的内部结构");System.out.println("3. 易于扩展:新增集合类型很容易");System.out.println("4. 简化客户端:简化客户端代码");System.out.println("\n=== 实际应用场景 ===");System.out.println("1. 集合框架:Java集合框架");System.out.println("2. 数据库查询:数据库结果集");System.out.println("3. 文件遍历:文件系统遍历");System.out.println("4. 树形结构:树形结构遍历");System.out.println("\n=== Java中的迭代器 ===");System.out.println("Java中的集合框架都实现了Iterable接口:");System.out.println("- List: ArrayList, LinkedList");System.out.println("- Set: HashSet, TreeSet");System.out.println("- Map: HashMap, TreeMap (通过entrySet())");System.out.println("\n使用for-each循环:");System.out.println("for (Object element : collection) {");System.out.println(" System.out.println(element);");System.out.println("}");}}

迭代器模式的优点

  1. 统一接口:提供统一的遍历接口
  2. 隐藏内部:隐藏集合的内部结构
  3. 易于扩展:新增集合类型很容易
  4. 简化客户端:简化客户端代码

迭代器模式的缺点

  1. 增加复杂度:引入了额外的类
  2. 性能开销:多了一层调用

适用场景

  1. 遍历集合:需要遍历集合对象
  2. 统一接口:需要统一的遍历接口
  3. 隐藏内部:需要隐藏集合的内部结构

常见应用场景

  • 集合框架:Java集合框架
  • 数据库查询:数据库结果集
  • 文件遍历:文件系统遍历

使用建议

  • 遍历集合:使用迭代器模式
  • 统一接口:使用迭代器模式
  • 简单遍历:直接使用for循环即可

注意事项

⚠️ 迭代器模式虽然有用,但要注意:

  • 考虑使用for-each循环
  • 注意并发修改问题
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 15:04:15

OpenClaw:你的个人AI助手,多平台统一控制的革命性方案

在这个AI助手百花齐放的时代&#xff0c;你是否厌倦了在多个平台间来回切换&#xff1f;OpenClaw用一套系统统一了所有沟通渠道&#xff0c;让你真正拥有属于自己的AI助手。 &#x1f99e; 什么是OpenClaw&#xff1f; OpenClaw是一个开源的个人AI助手平台&#xff0c;它可以在…

作者头像 李华
网站建设 2026/8/7 23:41:14

Java Web 房屋交易平台系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着互联网技术的快速发展&#xff0c;房地产行业逐渐向数字化转型&#xff0c;传统的房屋交易模式已无法满足用户对高效、透明和便捷服务的需求。线上房屋交易平台的出现&#xff0c;为用户提供了更加多样化的选择&#xff0c;同时也为开发商和中介机构拓宽了销售渠道。然…

作者头像 李华
网站建设 2026/8/3 13:29:32

5分钟部署Z-Image-ComfyUI,文生图一键生成超清美图

5分钟部署Z-Image-ComfyUI&#xff0c;文生图一键生成超清美图 你是否试过输入一段文字&#xff0c;几秒后眼前就浮现出一张高清、细腻、风格精准的图片&#xff1f;不是模糊的草图&#xff0c;不是失真的构图&#xff0c;而是真正能用在海报、社交配图甚至设计初稿里的成品—…

作者头像 李华
网站建设 2026/8/5 13:55:27

人脸识别OOD模型实际作品:质量分分层抽样生成的特征空间分布热力图

人脸识别OOD模型实际作品&#xff1a;质量分分层抽样生成的特征空间分布热力图 1. 什么是人脸识别OOD模型&#xff1f; 你可能已经用过很多人脸识别系统——刷脸打卡、门禁通行、手机解锁。但有没有遇到过这些情况&#xff1a; 光线太暗时&#xff0c;系统反复提示“请正对镜…

作者头像 李华
网站建设 2026/8/2 18:54:46

GLM-4V-9B教育行业应用:数学题图解分析+物理实验图数据提取

GLM-4V-9B教育行业应用&#xff1a;数学题图解分析物理实验图数据提取 1. 为什么教育工作者需要一个“看得懂图”的AI&#xff1f; 你有没有遇到过这样的场景&#xff1a; 学生发来一张手写的数学几何题照片&#xff0c;辅助线画得歪歪扭扭&#xff0c;角度标注挤在角落&…

作者头像 李华