背景与问题
对容器的访问,例如java的List、Map等,必然涉及遍历算法。
- 若将遍历方法封装到容器中,容器类负担重;
- 若遍历方法由使用者实现,会暴露容器的内部细节;
解决方案
迭代器模式
- 定义
提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。 - 使用场景
遍历一个容器对象时 UML类图
- Iterator:迭代器接口,负责访问、遍历元素。
- ConcreteIterator:具体迭代器类,实现迭代器接口,记录遍历位置。
- Aggregate:容器接口,提供创建具体迭代器的接口
- ConcreteAggregate:具体容器类,与具体迭代器相关联
应用实例
Cursor- 总结
- 优点:弱化容器类与遍历算法的关系
- 缺点:更多代码
参考文献:
android源码设计模式解析与实战