九江市网站建设_网站建设公司_H5网站_seo优化
2026/1/17 13:54:44 网站建设 项目流程

文章目录

    • 1. 引言:为什么我们每天都在用迭代器?
    • 2. 什么是迭代器模式
      • GoF 定义
    • 3. 迭代器模式的核心思想
    • 4. 迭代器模式的结构
    • 5. 示例:自定义集合 + 迭代器
      • 5.1 迭代器接口
      • 5.2 聚合接口
      • 5.3 具体聚合类
      • 5.4 客户端使用
    • 6. 迭代器模式的优点
    • 7. 迭代器模式的缺点
    • 8. 内部迭代 vs 外部迭代
      • 外部迭代(传统 Iterator)
      • 内部迭代(Stream)
    • 9. JDK 中的迭代器模式
      • Iterator 接口
    • 10. 适用场景
    • 11. 一个常见误区
    • 12. 迭代器 vs 访问者
    • 参考

1. 引言:为什么我们每天都在用迭代器?

你在 Java 中几乎每天都会写:

for(Strings:list){System.out.println(s);}

或者:

Iterator<String>it=list.iterator();while(it.hasNext()){System.out.println(it.next());}

但你是否想过:

  • ArrayListHashSet底层结构完全不同
  • 为什么遍历方式却是统一的?

答案就是:迭代器模式

在不暴露集合内部结构的前提下,顺序访问集合元素


2. 什么是迭代器模式

GoF 定义

提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部表示。

详细解释:迭代器模式提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

一句话理解:

遍历与集合实现解耦。


3. 迭代器模式的核心思想

迭代器模式解决了三个问题:

  1. 如何遍历集合
  2. 不暴露集合内部结构
  3. 提供统一遍历接口

集合负责存储,迭代器负责遍历。


4. 迭代器模式的结构

迭代器模式包含四个角色:

  1. Iterator(迭代器接口)

定义访问和遍历聚合元素的接口,通常包含 hasNext()、next() 等方法。

  1. ConcreteIterator(具体迭代器)

实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。

  1. Aggregate(聚合接口)

定义存储、添加、删除聚合元素以及创建迭代器对象的接口。

  1. ConcreteAggregate(具体聚合)

实现抽象聚合类,返回一个具体迭代器的实例。


5. 示例:自定义集合 + 迭代器

5.1 迭代器接口

publicinterfaceIterator<E>{booleanhasNext();Enext();}

5.2 聚合接口

publicinterfaceContainer<E>{Iterator<E>iterator();}

5.3 具体聚合类

publicclassNameRepositoryimplementsContainer<String>{privateString[]names={"Alice","Bob","Charlie"};@OverridepublicIterator<String>iterator(){returnnewNameIterator();}privateclassNameIteratorimplementsIterator<String>{privateintindex;@OverridepublicbooleanhasNext(){returnindex<names.length;}@OverridepublicStringnext(){returnnames[index++];}}}

5.4 客户端使用

NameRepositoryrepo=newNameRepository();Iterator<String>it=repo.iterator();while(it.hasNext()){System.out.println(it.next());}

6. 迭代器模式的优点

  1. 隐藏集合内部结构
  2. 遍历方式统一
  3. 支持多种遍历策略
  4. 符合单一职责原则

7. 迭代器模式的缺点

  1. 增加类数量
  2. 对简单集合可能显得冗余

8. 内部迭代 vs 外部迭代

外部迭代(传统 Iterator)

while(it.hasNext()){process(it.next());}

内部迭代(Stream)

list.stream().forEach(this::process);

对比:

方式控制权
外部迭代调用者
内部迭代集合

9. JDK 中的迭代器模式

Iterator 接口

publicinterfaceIterator<E>{booleanhasNext();Enext();}
  • ArrayList
  • HashSet
  • LinkedList

都通过 Iterator 统一遍历。


10. 适用场景

  • 不同集合统一遍历
  • 隐藏复杂数据结构
  • 提供多种遍历策略

11. 一个常见误区

迭代器模式不是 for 循环的替代,而是“遍历规则的抽象”。


12. 迭代器 vs 访问者

模式关注点
迭代器如何遍历
访问者如何操作

参考

迭代器模式 | 菜鸟教程

《图解设计模式》

迭代器 - Java教程 - 廖雪峰的官方网站

迭代器设计模式

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询