迭代器模式,提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。迭代器模式结构图如下所示:
Iterator迭代器抽象类:
abstract class Iterator{
public abstract Object First();
public abstract Object Next();
public abstract boolean IsDone();
public abstract Object CurrentItem();
}
Aggregate聚集抽象类:
abstract class Aggregate{
public abstract Iterator CreateIterator();
}
ConcreteIterator具体迭代器类,继承Iterator:
class ConcreteIterator extends Iterator{
private ConcreteAggregate aggregate;
private int current=0;
public ConcreteIterator(ConcreteAggregate aggregate){
this.aggregate=aggregate;
}
public Object First(){
return aggregate[0];
}
public Object Next(){
Object ret=null;
current++;
if(current<aggregate.Count){
ret=aggregate[current];
}
return ret;
}
public boolean IsDone(){
return current>=aggregate.Count?true:false;
}
public Object CurrentItem(){
return aggregate[current];
}
}
ConcreteAggregate具体聚集类,继承Aggregate:
class ConcreteAggregate extends Aggregate{
private List<Object> items=new ArrayList<Object>();
public Iterator CreateIterator(){
return new ConcreteIterator(this);
}
public int Count(){
return items.size();
}
public Object this[int index]{
get{return items[index];}
set{items.Insert(index,value);}
}
}
迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器来负责,这样既可以做到不暴露集合的内部结构,又可以让外部代码透明地访问集合内部的数据。