目的

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

类图

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

迭代器类图.png

实现

  1. public interface Aggregate {
  2. Iterator createIterator();
  3. }
  4. public class ConcreteAggregate implements Aggregate {
  5. private Integer[] items;
  6. public ConcreteAggregate() {
  7. items = new Integer[10];
  8. for (int i = 0; i < items.length; i++) {
  9. items[i] = i;
  10. }
  11. }
  12. @Override
  13. public Iterator createIterator() {
  14. return new ConcreteIterator<Integer>(items);
  15. }
  16. }
  17. public interface Iterator<Item> {
  18. Item next();
  19. boolean hasNext();
  20. }
  21. public class ConcreteIterator<Item> implements Iterator {
  22. private Item[] items;
  23. private int position = 0;
  24. public ConcreteIterator(Item[] items) {
  25. this.items = items;
  26. }
  27. @Override
  28. public Object next() {
  29. return items[position++];
  30. }
  31. @Override
  32. public boolean hasNext() {
  33. return position < items.length;
  34. }
  35. }
  36. public class Client {
  37. public static void main(String[] args) {
  38. Aggregate aggregate = new ConcreteAggregate();
  39. Iterator<Integer> iterator = aggregate.createIterator();
  40. while (iterator.hasNext()) {
  41. System.out.println(iterator.next());
  42. }
  43. }
  44. }

JDK中的体现