迭代器模式(Iterator)提供了顺序访问一个聚合对象中各个元素的方法。
当遍历算法由聚合本身定义,而迭代器仅用于存储当且位置时,这种迭代器可称之为游标(Cursor)。
迭代器模式包含四部分:
- Iterator 定义遍历元素的接口
- ConcreteIterator 迭代器的具体实现,跟踪当前位置
- Aggregate 聚合,定义迭代器的创建接口
- ConcreteAggregate 创建对应的ConcreteIterator
Iterator
interface Iterator {
void first();
void next();
boolean isDone();
Object currentItem();
}
ConcreteIterator
class ConcreteIterator implements Iterator{
private ConcreteAggregate concreteAggregate;
private int index = 0;
public ConcreteIterator(ConcreteAggregate concreteAggregate) {
this.concreteAggregate = concreteAggregate;
}
@Override
public void first() {
index = 0;
}
@Override
public void next() {
index++;
}
@Override
public boolean isDone() {
return index >= concreteAggregate.size();
}
@Override
public Object currentItem() {
if(!isDone())
return concreteAggregate.get(index);
return null;
}
}
Aggregate
interface Aggregate {
Iterator createIterator();
}
ConcreteAggregate
class ConcreteAggregate implements Aggregate {
private Object[] objects;
@Override
public Iterator createIterator() {
return new ConcreteIterator(this);
}
public int size() {
return objects.length;
}
public Object get(int index) {
return objects[index];
}
}