前言: 主要应用在对聚集的遍历。
为什么需要使用迭代子模式: 将集合的定义和对集合的遍历操作拆分开来,便于集合操作的扩展。 迭代子对象是对遍历的抽象化。遍历算法被封装在迭代子对象中,因此遍历算法可以独立与聚集对象而变化。
类图: 白盒聚集与外禀迭代子 黑盒聚集与内禀迭代子
1.Aggregate 抽象聚集角色类:需要包含一个生成迭代子对象的方法。 2.ConcreteAggregate 具体聚集角色类:除开实现抽象类外,在白盒中,还包含获取具体元素,及集合大小的方法。在黑盒中则不必提供。 3.Iterator 抽象迭代子角色类:包含一些移动游标及获取当前元素的方法。 4.ConcreteIterator 具体迭代子角色类:在黑盒实现中,这个类是包含在具体聚集角色类中的。 实现双重接口的方法一般是使用内部类。
其他概念: 静态迭代 迭代子对象保存了聚集对象的一份快照。
动态迭代 迭代子对象只保存聚集对象的引用,因此需要考虑聚集对象元素的变化。
快速失败 如果聚集对象的元素在一个动态的迭代过程中发生变化时,如果此时迭代过程无法进行下去,则应立即抛出一个异常。