一、定义

  迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

 

二、结构

迭代器模式的结构 

 

迭代器模式主要包含以下角色。

  1)抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。

  2)具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。 

  3)抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。

  4)具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。

结构图

  【设计模式】迭代器模式_迭代器

三、代码实现

【设计模式】迭代器模式_迭代器_02

 1 public class Client { 2     public static void main(String[] args) { 3         Aggregate ag = new ConcreteAggregate(); 4         ag.add("中山大学"); 5         ag.add("华南理工"); 6         ag.add("韶关学院"); 7         System.out.println("聚合的内容有:"); 8         Iterator it = ag.getIterator(); 9         while (it.hasNext()) {10             System.out.println(it.next().toString());11         }12     }13 }14 15 16 // 抽象聚合17 interface Aggregate {18     public void add(Object obj);19 20     public void remove(Object obj);21 22     public Iterator getIterator();23 }24 25 // 具体聚合26 class ConcreteAggregate implements Aggregate {27 28     private List<Object> list = new ArrayList<>();29 30     @Override31     public void add(Object obj) {32         list.add(obj);33     }34 35     @Override36     public void remove(Object obj) {37         list.remove(obj);38     }39 40     @Override41     public Iterator getIterator() {42         return new ConcreteIterator(list);43     }44 }45 46 // 抽象迭代器47 interface Iterator {48     boolean hasNext();49 50     Object next();51 52     void remove(Object obj);53 }54 55 // 具体迭代器56 class ConcreteIterator implements Iterator {57 58     private List<Object> list = null;59     private int index = -1;60 61     public ConcreteIterator(List<Object> list) {62         this.list = list;63     }64 65     @Override66     public boolean hasNext() {67         if (index < list.size() - 1) {68             return true;69         }70         return false;71     }72 73     @Override74     public Object next() {75         return list.get(++index);76     }77 78     @Override79     public void remove(Object obj) {80         index--;81         list.remove(obj);82     }83 }

【设计模式】迭代器模式_迭代器_02

四、JDK源码实现

  参考:集合类的Iterator