news 2026/6/13 21:34:30

设计模式——迭代器模式

作者头像

张小明

前端开发工程师

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/6/12 10:16:46

Swin2SR操作流程:左侧面板上传图片注意事项

Swin2SR操作流程&#xff1a;左侧面板上传图片注意事项 1. 为什么说Swin2SR是“AI显微镜” 你有没有试过把一张模糊的截图放大到全屏——结果满屏都是马赛克和糊成一片的边缘&#xff1f;传统方法只能“拉伸”&#xff0c;而Swin2SR不是在拉&#xff0c;是在“看”、在“想”…

作者头像 李华
网站建设 2026/6/7 16:21:44

基于Spring Boot的连锁电影院管理系统的设计与实现

设计题目 基于Spring Boot的连锁电影院管理系统的设计与实现 选题依据&#xff1a;1.国内外有关的研究动态 2.理论及实际意义 1.国内外有关的研究动态 随着数字技术与互联网的深度融合&#xff0c;电影产业的数字化转型进程不断加速&#xff0c;电影院管理系统作为提升影院运…

作者头像 李华
网站建设 2026/6/9 23:19:11

RexUniNLU效果实测:指代消解+阅读理解+层次分类三任务联合推理展示

RexUniNLU效果实测&#xff1a;指代消解阅读理解层次分类三任务联合推理展示 1. 为什么这次实测值得你花5分钟看完 你有没有遇到过这样的情况&#xff1a; 一段话里反复出现“它”“这个”“他们”&#xff0c;但读完三遍还是不确定“它”到底指哪个东西&#xff1f; 或者客户…

作者头像 李华
网站建设 2026/6/11 0:39:32

PETRV2-BEV在智慧港口的应用:集装箱车辆BEV检测模型训练实践

PETRV2-BEV在智慧港口的应用&#xff1a;集装箱车辆BEV检测模型训练实践 在智慧港口建设加速推进的今天&#xff0c;自动化导引车&#xff08;AGV&#xff09;、无人集卡、智能堆场管理等场景对高精度、强鲁棒的三维目标检测能力提出了迫切需求。传统基于激光雷达或纯视觉的方…

作者头像 李华
网站建设 2026/5/29 19:00:52

告别复杂配置:Meixiong Niannian画图引擎的Streamlit WebUI使用详解

告别复杂配置&#xff1a;Meixiong Niannian画图引擎的Streamlit WebUI使用详解 [TOC] 1. 为什么你需要这个画图引擎&#xff1f; 你是不是也经历过这些时刻&#xff1a; 下载了SDXL模型&#xff0c;配好环境&#xff0c;敲了一堆命令&#xff0c;结果显存爆了&#xff0c;…

作者头像 李华