迭代器模式(ITERATOR),又称游标(Cursor),提供了一种方法,用于顺序访问一个聚合对象中的各个元素,而不需暴露该对象的内部表示,属于对象行为型模式。迭代器模式通过将对聚合对象(通常为列表)的访问和遍历从聚合对象中分离出来并放入一个迭代器对象中,迭代器对象知道如何遍历列表,这样不仅可以简化聚合对象的实现(将遍历操作交给迭代器负责,自己只负责保存),还可以以不同的方式遍历列表。
一、使用场景
1、访问一个聚合对象的内容而无需暴露它的内部表示。
2、支持对聚合对象的多种遍历,比如正向遍历,逆向遍历,JDK的迭代器只实现正向遍历。
3、为遍历不同的聚合结构提供一个统一的接口。对不同的聚合结构只需切换要遍历的对象而不需改变遍历过程的代码。
二、UML图
三、Java实现
运行结果:四、模式优缺点
优点:
1、支持以不同的方式遍历一个聚合。想改变遍历方式只需用一个不同的迭代器实例代替原先的实例即可。
2、迭代器简化聚合的接口。有了迭代器的遍历接口,聚合本身就不需要类似的遍历接口了。
3、在同一个聚合上可以有多个遍历。每个迭代器保持它自己的遍历状态,互不影响。
缺点:
1、抽象迭代器的设计比较难以把握,如果前期设计不好,后期改动就会非常大。比如JDK的迭代器只支持正向遍历,如果想实现其他遍历方式只能通过添加辅助类实现。