迭代器模式(iterator pattern): 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露其内部的表示。

意图

提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。

类图

  • Aggregate 是聚合类,其中 createIterator() 方法可以产生一个 Iterator;
  • Iterator 主要定义了 hasNext() 和 next() 方法。
  • Client 组合了 Aggregate,为了迭代遍历 Aggregate,也需要组合 Iterator。

image.png

实现

  1. public interface Aggregate {
  2. Iterator createIterator();
  3. }
  1. public class ConcreteAggregate implements Aggregate {
  2. private Integer[] items;
  3. public ConcreteAggregate() {
  4. items = new Integer[10];
  5. for (int i = 0; i < items.length; i++) {
  6. items[i] = i;
  7. }
  8. }
  9. @Override
  10. public Iterator createIterator() {
  11. return new ConcreteIterator<Integer>(items);
  12. }
  13. }
  1. public interface Iterator<Item> {
  2. Item next();
  3. boolean hasNext();
  4. }
  1. public class ConcreteIterator<Item> implements Iterator {
  2. private Item[] items;
  3. private int position = 0;
  4. public ConcreteIterator(Item[] items) {
  5. this.items = items;
  6. }
  7. @Override
  8. public Object next() {
  9. return items[position++];
  10. }
  11. @Override
  12. public boolean hasNext() {
  13. return position < items.length;
  14. }
  15. }
  1. public class Client {
  2. public static void main(String[] args) {
  3. Aggregate aggregate = new ConcreteAggregate();
  4. Iterator<Integer> iterator = aggregate.createIterator();
  5. while (iterator.hasNext()) {
  6. System.out.println(iterator.next());
  7. }
  8. }
  9. }

JDK