模式定义
迭代器模式(Iterator Pattern),属于行为型模式,是 Java非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器在Java中有专门的Iterator
接口,Java集合类一般都实现了该接口,也就是说都支持通过迭代器来进行顺序元素访问。
模式示例
迭代器模式实现的关键就是迭代接口的定义了,一般需要定义以下方法:
- hashNext(),是否存在下一个元素;
- next(),获取下一个元素;
下面通过示例来实现迭代器模式,需要定义聚合对象,迭代器。下例主要完成对一组姓名信息的迭代输出(只为演示使用)。
定义迭代器接口
1 | public interface Iterator { |
定义Container接口,用于获取迭代器
1 | public interface Container { |
定义聚合对象,并实现迭代器接口
1 | public class NameRepository implements Container { |
编写客户端进行迭代访问
1 | public class IteratorPatternDemo { |
输出结果如下
1 | Name : Ethan |
注意:在需要对集合遍历并删除指定元素时,用迭代器可以很好的避免边移除边遍历造成的问题。
模式总结
从Java集合类大都实现了Iterator
这一点可以看出,迭代器模式肯定会给设计者带来诸多好处。它主要解决对聚合对象的遍历问题,可以通过定义不同的迭代器来完成不同方式的遍历。
优缺点
- 优点
- 它支持以不同的方式遍历一个聚合对象;
- 迭代器简化了聚合类;
- 在同一个聚合上可以有多个遍历;
- 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
- 缺点
- 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
使用场景
- 访问一个聚合对象的内容而无须暴露它的内部表示。
- 需要为聚合对象提供多种遍历方式。
- 为遍历不同的聚合结构提供一个统一的接口。
注意事项
迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。