【设计模式】迭代器模式

一、定义

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

二、结构

迭代器模式的结构 

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

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

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

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

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

结构图

  

三、代码实现

 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     @Override
31     public void add(Object obj) {
32         list.add(obj);
33     }
34 
35     @Override
36     public void remove(Object obj) {
37         list.remove(obj);
38     }
39 
40     @Override
41     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     @Override
66     public boolean hasNext() {
67         if (index < list.size() - 1) {
68             return true;
69         }
70         return false;
71     }
72 
73     @Override
74     public Object next() {
75         return list.get(++index);
76     }
77 
78     @Override
79     public void remove(Object obj) {
80         index--;
81         list.remove(obj);
82     }
83 }

四、JDK源码实现

  参考:集合类的Iterator

原文地址:https://www.cnblogs.com/h--d/p/14705378.html