本文共 2147 字,大约阅读时间需要 7 分钟。
迭代器模式(Iterator),提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示 。
1、迭代器抽象类
public abstract class Iterator { public abstract Object first(); public abstract Object next(); public abstract boolean isDone(); public abstract Object currentItem();}
2、聚集抽象类
public abstract class Aggregate { public abstract Iterator createIterator();}
3、具体迭代器
public class ConcreteIterator extends Iterator { private ConcreteAggregate concreteAggregate; private int current = 0; public ConcreteIterator(ConcreteAggregate concreteAggregate) { this.concreteAggregate = concreteAggregate; } @Override public Object first() { return concreteAggregate.getObject(0); } @Override public Object next() { Object o = null; current++; if(current < concreteAggregate.count()){ o = concreteAggregate.getObject(current); } return o; } @Override public boolean isDone() { return current >= concreteAggregate.count()?true:false; } @Override public Object currentItem() { return concreteAggregate.getObject(current); }}
4、具体聚集类
public class ConcreteAggregate extends Aggregate { private List
5、测试类
public class Test { public static void main(String[] args) { ConcreteAggregate concreteAggregate = new ConcreteAggregate(); concreteAggregate.createIterator(); concreteAggregate.setObject(0,"张三"); concreteAggregate.setObject(1,"李四"); concreteAggregate.setObject(2,"王五"); Iterator iterator = new ConcreteIterator(concreteAggregate); Object o = iterator.first(); while (!iterator.isDone()){ System.out.println(iterator.currentItem()+":请买车票!"); iterator.next(); } }}输出:张三:请买车票!李四:请买车票!王五:请买车票!
注:参考文献《大话设计模式》程杰著。