意图:提供一种方法顺序访问一个组合对象中的各个元素,而又不需要暴露该对象的内部表示。
动机:在软件构建过程中,集合对象内部结构常常变化各异,但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这个“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。
适用性:
访问一个集合对象的内容而无需暴露它的内部表示
支持聚合对象的多种遍历
为遍历不同的聚合结构提供一个统一的接口
结构:
参与者:
Iterator: 迭代器定义访问和遍历元素的接口
ConcreteIterator : 具体迭代器实现迭代器接口;对该聚合遍历时跟踪当前位置
Aggregate: 聚合定义创建相应的迭代器
ConcreteAffregate : 具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例
协作:
ConcreteIterator跟踪聚合中的当前对象,并能够计算出待遍历的后继对象。
效果:
支持以不同的方式遍历一个聚合
简化了聚合的接口
在同一个聚合上可以有多个遍历
实现:
代码示例如下:
1 |
|