1. 意图(Intent)
提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。
2. 类图(Class Diagram)

- Aggregate :是聚合类,其中 createIterator() 方法可以产生一个 Iterator;
- Iterator :主要定义了 hasNext() 和 next() 方法;
- Client :组合了 Aggregate,为了迭代遍历 Aggregate,也需要组合 Iterator。
3. 实现(Implementation)
具体的迭代器实现类(ConcreteIterator)中有一个指针或者说引用类型,指向了具体容器实现类(ConcreteAggregate),因此通过指针或引用操作即可 。
聚合类接口 [ Aggregate ]
public interface Aggregate {Iterator createIterator();}
某个具体的实现聚合类 [ ConcreteAggregate ]
public class ConcreteAggregate implements Aggregate {private Integer[] items; // 内部结构是一个数组public ConcreteAggregate() {items = new Integer[10];for (int i = 0; i < items.length; i++) {items[i] = i;}}@Overridepublic Iterator createIterator() {return new ConcreteIterator<Integer>(items);}}
抽象的迭代器接口 [ Iterator ]
public interface Iterator<Item> {Item next(); // 返回下一个迭代器boolean hasNext(); // 是否有下一个迭代器}
具体的迭代器实现类 [ ConcreteIterator ]
public class ConcreteIterator<Item> implements Iterator {private Item[] items;private int position = 0;public ConcreteIterator(Item[] items) {this.items = items;}@Overridepublic Object next() {return items[position++];}@Overridepublic boolean hasNext() {return position < items.length;}}
客户端演示:
public class Client {public static void main(String[] args) {Aggregate aggregate = new ConcreteAggregate();Iterator<Integer> iterator = aggregate.createIterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}}
