迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
核心结构
1、集合:一个接口,规定了具体集合需要实现的操作。
2、具体集合:具体集合石实现了集合接口的一个实例,具体的集合按照一定的结构存储对象。具体集合应该有一个方法,该方法返回一个针对该集合的具体迭代器。
3、迭代器:一个接口,规定了遍历具体集合的方法,比如next()方法。
4、具体迭代器:实现了迭代器接口的类的实例。具体迭代器在实现迭代器接口所规定的遍历集合的方法时,比如next()方法,要保证首次调用将按着集合的数据结构找到该集合的一个对象,并且每当找到集合中的一个对象,立即根据该集合的存储结构得到待遍历的后继对象的引用,并保证一次调用next()方法可以遍历集合。
结构图:
java代码示例
interface Iterator {
Object First();
Object Next();
boolean IsDone();
Object CurrentItem();
}
abstract class Aggregate {
abstract Iterator CreateIterator();
}
class ConcreteIterator implements Iterator {
private List<Object> list = new ArrayList<Object>();
private int curr = 0;
public ConcreteIterator(List<Object> list) {
this.list = list;
}
public Object First() {
return list.get(0);
}
public Object Next() {
Object ret = null;
curr++;
if (curr < list.size()) {
ret = list.get(curr);
}
return ret;
}
public boolean IsDone() {
return curr >= list.size() ? true : false;
}
public Object CurrentItem() {
return list.get(curr);
}
}
class ConcreteAggregate extends Aggregate {
private List<Object> list = new ArrayList<Object>();
public ConcreteAggregate(List<Object> list) {
this.list = list;
}
public Iterator CreateIterator() {
return new ConcreteIterator(list);
}
}
class client {
public static void main(String[] args) {
List<Object> list = new ArrayList<Object>();
list.add("miner");
list.add("any");
Aggregate agg = new ConcreteAggregate(list);
Iterator iterator = agg.CreateIterator();
iterator.First();
while (!iterator.IsDone()) {
System.out.println(iterator.CurrentItem());
iterator.Next();
}
}
}
拓展连接