迭代器模式
迭代器模式有叫做游标(Cursor)模式,是一种对象行为型模式,它提供一种方法顺序访问一个聚合对象的各个元素,而不需要暴露该对象的内部表示。
定义
提供一种方法顺序访问一个聚合对象的各个元素,而不需要暴露该对象的内部表示。
使用场景
- 访问一个聚合对象的内容而无需暴露它的内部表示。
- 支持对聚合对象的多种遍历。
- 为遍历不同的聚合结构提供一个统一地接口(支持多态迭代)。
结构
实现
public interface Iterator {
Object first();
Object next();
Object currentItem();
boolean isDone();
}
public class ConcreteIterator implements Iterator{
private List<Object> list;
private int cursor = 0;
public ConcreteIterator(List<Object> list) {
this.list = list;
}
public Object first() {
cursor = 0;
return list.get(cursor);
}
public Object next() {
cursor++;
return list.get(cursor);
}
public Object currentItem() {
return list.get(cursor);
}
public boolean isDone() {
if (cursor >= this.list.size() - 1) {
return true;
} else {
return false;
}
}
}
public interface Aggregate {
Iterator createIterator();
}
public class ConcreteAggregate implements Aggregate{
private List<Object> list;
public ConcreteAggregate(List<Object> list){
this.list = list;
}
public Iterator createIterator() {
return new ConcreteIterator(this.list);
}
}
测试
public class Client {
public static void main(String[] args) {
List<Object> list = new ArrayList<Object>();
list.add(1);
list.add(2);
Aggregate aggregate = new ConcreteAggregate(list);
Iterator it = aggregate.createIterator();
System.out.println(it.currentItem());
while(!it.isDone()){
System.out.println(it.next());
}
}
}
测试结果:
1
2
迭代器的应用很广泛,常用的JDK的集合类库中有各种各样的迭代器。