介绍
迭代器模式(Iterator Pattern) 又称游标(Cursor) 模式,是行为型设计模式之一。迭代器模式源于对容器的访问,比如 Java 中的 List、Map、数组等,我们知道对容器对象的访问必然会涉及到遍历算法,我们可以将遍历的方法封装在容器中,或者不提供便利方法。如果我们将便利方法封装在容器中,那么对于容器来说承担了过多的功能,容器类不仅要维护自身内部的数据元素而且还要对外提供遍历的接口方法,因为遍历状态的存储问题还不能对同一个容器同时进行多个便利操作,如果我们不提供便利方法而让使用者自己去实现,又会让容器内部细节暴露,因此,迭代器模式产生,在客户访问类与容器之间插入了一个第三者 - 迭代器,很好的解决了上述的弊端。
定义
提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。
使用场景
遍历一个容器对象时
角色介绍
Iterator 迭代器接口,负责定义访问和遍历元素的接口,有 hasNext 和 next 两个抽象方法
ConcreteIterator 具体迭代器类,主要实现迭代器接口,并记录遍历的当前位置
Aggregate 容器接口,负责 提供 创建具体迭代器角色的接口
ConcreteAggregate 具体容器类,实现创建迭代器角色的接口,创建具体的迭代器与该容器相关联
Client 客户端类
public interface Iterator<E> {
boolean hasNext();
E next();
}
public Interface Aggregate<E> {
Iterator<E> iterator;
}
使用泛型,这样在列表中放入的元素确定之后,可以在放入非该类型元素的时候编译不通过,而不是非要运行期才发现错误
Android 源码中的迭代器模式
典型的例子就是数据库查询使用的 Cursor,该游标对象的实质就是一个具体的迭代器
优点
支持以不同的方式去遍历一个容器对象,也可以有多个遍历,弱化了容器类与遍历算法直接的关系
缺点
类文件的增加
网友评论