迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露对象内部表示。
迭代器模式
迭代器模式 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