迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露对象内部表示。
迭代器模式
迭代器模式 Iterator[ɪtə'reɪtə] Pattern:又称为游标 Cursor 模式,是非常古老的设计模式,主要用于对容器的遍历访问,当前高级面向对象语言基本上默认包含这个模式。
类图结构

结构解析
Iterator
接口,定义迭代器的基本方法。ConcreteIterator
实现类,实现迭代器的方法。Aggregate
抽象类,容器类,存储数据并创建迭代器。ConcreteAggregate
实现类,容器的各个方法的实现,并完成具体迭代器的创建。Client
客户端。
ConcreteIterator 和 ConcreteAggregate 耦合性很高。ConcreteAggregate 创建了 ConcreteIterator 实例,而 ConcreteIterator 持有 ConcreteAggregate 的引用,用于遍历容器中的数据。
迭代器模式结构图看起来很臃肿,使用起来并不方便,而分开的目的参考单一职责原理,Aggregate 负责容器中数据元素的维护,而 Iterator 负责遍历操作。
示例
1 | // 1. Iterator |
使用 List 数据结构来存放数据,它本身就实现了 Iterator 模式,这里只是举例来说明迭代器使用方法。
总结
Java 语言已经包含了迭代器接口 Interator,在实际使用中仅仅需要实现 Collection 集合就能应用迭代器模式,其中 List, Map 等等都都是常见迭代器容器。而 Android 中 Cursor 也是典型的迭代器模式。
迭代器模式分离了集合对象的遍历行为,抽象一个迭代器类来负责遍历操作,这样既可以不用暴露集合内部的数据结构,又可以让外部代码非常透明的访问集合内部的数据。
参考文档
- 大话设计模式
Android源码设计模式解析与实战- wiki-iterator