迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式,其主要优点如下。
public interface Iterator {
//获得第一个
Object first();
//获得下一个
Object next();
//判断是否由下一个
boolean hasNext();
}
public interface Aggregate {
//添加
void add(Object obj);
//删除
void remove(Object obj);
//迭代
Iterator getIterator();
}
public class ConcreteIterator implements Iterator {
private List<Object> list=null;
private int index=-1;
public ConcreteIterator(List<Object> list) {
this.list=list;
}
@Override
public boolean hasNext() {
if(index<list.size()-1) {
return true;
} else {
return false;
}
}
@Override
public Object first() {
index=0;
Object obj=list.get(index);;
return obj;
}
@Override
public Object next() {
Object obj=null;
if(this.hasNext()) {
obj=list.get(++index);
}
return obj;
}
}
public class ConcreteAggregate implements Aggregate {
private List<Object> list=new ArrayList<Object>();
@Override
public void add(Object obj) {
list.add(obj);
}
@Override
public void remove(Object obj) {
list.remove(obj);
}
@Override
public Iterator getIterator() {
return(new ConcreteIterator(list));
}
}
public class IteratorPattern {
public static void main(String[] args) {
Aggregate ag=new ConcreteAggregate();
ag.add("中山大学");
ag.add("华南理工");
ag.add("韶关学院");
System.out.print("聚合的内容有:");
Iterator it=ag.getIterator();
while(it.hasNext()) {
Object ob=it.next();
System.out.print(ob.toString()+"\t");
}
Object ob=it.first();
System.out.println("\nFirst:"+ob.toString());
}
}