学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
Python实战微信订餐小程序 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
Python量化交易实战 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
迭代器设计模式(Iterator Design Pattern),也叫作游标设计模式(Cursor Design Pattern)。
迭代器模式将集合对象的遍历操作从集合类中拆分出来,放到迭代器类中,让两者的职责更加单一。
其定义是,提供一种方法来访问聚合对象,而不暴露这个对象的内部实现。
首先,定义一个用于遍历聚合对象中所存储元素的抽象迭代器接口,其代码示例如下:
| | public interface Iterator { |
| | // 将游标指向第一个元素 |
| | public void first(); |
| | // 将游标指向下一个元素 |
| | public void next(); |
| | // 判断是否存在下一个元素 |
| | public boolean hasNext(); |
| | // 获取游标指向的当前元素 |
| | public Object currentItem(); |
| | } |
然后,我们通常将存储数据的类称作为聚合类,一般会在聚合类中创建迭代器对象,如下是抽象聚合接口的代码示例:
| | public interface Aggregate { |
| | public Iterator creteIterator(); |
| | } |
在具体迭代器类中,我们需要注入聚合对象,以便后续使用迭代器时能访问到其数据,其代码示例如下:
| | public class ConcreteIterator implements Iterator { |
| | private Aggregate objects; |
| | private Object cursor; |
| | |
| | public ConcreteIterator(Aggregate objects) { |
| | this.objects = objects; |
| | } |
| | |
| | // 将游标指向第一个元素 |
| | public void first() {} |
| | // 将游标指向下一个元素 |
| | public void next() {} |
| | // 判断是否存在下一个元素 |
| | public boolean hasNext() {} |
| | // 获取游标指向的当前元素 |
| | public Object currentItem() {} |
| | } |
在具体聚合类中,通常是实现存储数据的逻辑,以及指定具体迭代器的对象,其代码示例如下:
| | public class ConcreteAggregate implements Aggregate { |
| | public Iterator creteIterator() { |
| | return new ConcreteIterator(this); |
| | } |
| | } |
迭代器模式的主要优点如下:
迭代器模式的主要缺点如下:
迭代器模式的适用场景如下:
在 Java 中,迭代器的应用非常广。
最顶层的 Collection
集合接口继承了 Iterable
接口,其实表明了所有的集合对象都是可迭代对象,并且都需要实现获取 Iterator
对象的方法。
将这个源码映射到典型实现中,Iterable
接口和 Collection
接口就是抽象聚合接口,Iterator
接口则是抽象迭代器接口。