适用性
为访问不同构成的聚合对象提供统一的方法。
支持以统一的方法实现不同形式的遍历。
归纳成一句话,就是使用迭代器模式可以以一种方式对不同构成的对象实现不同种类的遍历。
结构
参与者
• Iterator(抽象迭代器类)
— 抽象迭代器定义取得和遍历元素所需要的接口。类图中定义的接口只是一个示例。在实际的应用中,也可以有其他选择。例如可以让next方法除了移动当前位置之外还可以返回子元素,这样就可以省去IsDone接口。
• ConcreteIterator(具象迭代器类)
— 具象迭代器实现迭代器接口。在具体实现迭代器接口的时候,可能需要直接访问聚合类的数据,也可能是通过其他访问该聚合类的迭代器间接访问聚合类对象。
• Aggregate(聚合类)
— 聚合定义创建相应迭代器对象的接口。这个接口的用法,相当于工厂方法模式。也就是说这个聚合类还应该具有其他的功能。
• ConcreteAggregate(具象聚合类)
— 具象聚合类实现创建相应迭代器的接口,该操作返回ConcreteIterator的具体实例。
很多时候,抽象聚合类和具象聚合类之间会产生这种继承关系,并不是因为需要这种生成迭代器动作的抽象,而是由于这两个类本身的功能需求。生成迭代器只是软件开发上的需求,并不是类的本质特征。也有很多情况根本就不需要这种继承关系。
协作
• ConcreteIterator取得聚合中的当前子元素,并能够找到出待遍历的后继对象。
觉得本文有帮助?请分享给更多人。
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】