从JDK中学习设计模式——迭代器模式

275 阅读2分钟

这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战

概述

迭代器模式(Iterator Pattern)提供一种方法来遍历容器对象中的各个元素,而不用暴露该对象的内部细节,是一种对象行为型模式

结构

迭代器模式UML.png

  • Aggregate(抽象聚合类):用于存储和管理元素对象,一般是抽象类或接口。

  • ConcreteAggregate(具体聚合类):实现创建迭代器的方法

  • Iterator(抽象迭代器):定义了访问和遍历元素的接口,一般是抽象类或接口。

  • ConcreteIterator(具体迭代器):它实现了抽象迭代器接口,完成对聚合对象的遍历,同时在具体迭代器中通过游标来记录在聚合对象中所处的当前位置。

优点

  1. 提供了统一的方法来遍历聚合对象,客户端遍历集合时,只需取到迭代器,而不必知道聚合的具体组成,符合迪米特法则
  2. 迭代器面向接口编程,可以以不同的方式遍历聚合对象,客户不需要考虑聚合的类型,符合开闭原则
  3. 把对象的管理与遍历分开,集合改变只影响聚合对象,遍历方式改变只影响迭代器,符合单一职责原则

缺点

  1. 每个聚合对象都需要一个迭代器,会造成迭代器过多,不便于管理和维护
  2. 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性
  3. 抽象迭代器的设计难度较大,需要充分考虑到系统将来的扩展,不利于扩展

应用场景

  1. 需要为一个聚合对象提供多种遍历方式。
  2. 需要为遍历不同的聚合结构提供一个统一的接口。
  3. 需要访问一个聚合对象的内容,而又不想暴露它的内部。

JDK 中的应用

在 JDK 中 java.util.Iteratorjava.util.Enumeration 都使用了迭代器模式。

Iterator.png