✨模式类型✨✨ | ✨✨难度✨ ✨ | ✨✨实用性✨✨ | ✨✨重要程度✨✨ | ✨✨经典性✨✨ | ✨✨历史性✨ |
---|---|---|---|---|---|
行为型模式 | ★★★ ⬇️ | ★★★ ⬆️ | ★★★★ ⬆️ | 💚 ⬆️ | 💚 ⬆️ |
迭代器模式(Iterator Pattern
)是编程环境中常用的设计模式,这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层实现,迭代器模式属于行为型模式。
提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。主要解决不同的方式来遍历整个聚合集合对象。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。
通过利用迭代器遍历一个聚合对象,利用不同的方式来遍历整个整合对象,把在元素之间游走的责任交给迭代器,而不是聚合对象。
Iterator
迭代器角色:接口或抽象类,定义迭代器的方法提供实现接口,主要定义了hasNext()
和next()
方法。ConcreteIterator
具体迭代器实现角色:继承或实现Iterator
迭代器角色,完成Iterator
中hasNext()
和next()
方法的实现。Collection
集合类接口:定义创建Iterator
迭代器角色的方法产生一个Iterator
对象。ConcreteCollection
具体聚合集合类接口实现:实现Collection
集合类接口,提供创建Iterator
对象的方法。
-
优点
- 遍历丰富:它支持以不同的方式遍历一个聚合对象。
- 使用简单:迭代器简化了聚合类。
- 实现多样化:在同一个聚合上可以有多个遍历。
- 扩展性强:在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
-
缺点
- 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
迭代器模式的实现要点如下:
- 定义
Iterator
接口,提供hasNext()
和next()
方法,用来遍历和获取迭代器中的元素。 - 定义
Collection
集合类接口,提供创建Iterator
接口的方法。 - 实现
Collection
集合类接口的ConcreteCollection
具体聚合集合类,实现创建Iterator
接口的方法,并设置迭代器的迭代集合对象。 - 实现
Iterator
迭代器接口的ConcreteIterator
具体迭代器实现类,通过构造函数接收Collection
对象,利用Collection
对象中的方法和集合实现迭代器中的方法。
迭代器模式适用于:
- 访问聚合对象的内容,而不暴露其内部实现细节的表示。
- 支持聚合对象的多次遍历。
- 需要为聚合对象提供多种遍历方式。
- 为遍历不同的聚合结构提供一个统一的接口。
- 迭代器模式是编程环境中常用的设计模式,这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层实现,迭代器模式属于行为型模式。
- 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。主要解决不同的方式来遍历整个聚合集合对象。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。
- 通过利用迭代器遍历一个聚合对象,利用不同的方式来遍历整个整合对象,把在元素之间游走的责任交给迭代器,而不是聚合对象。
- 迭代器模式的优点有:提供不同的方式遍历聚合对象;简化了聚合类实现;同一个聚合对象可以同时存在多个遍历进行;扩展方便,增加新的聚合无需修改源代码。
- 迭代器模式适用于:访问聚合对象而不想提供或暴露原始聚合对象;同时满足多个聚合进行;需要满足存在多种不同的遍历;为不同的聚合遍历提供统一的接口。