一、定义
迭代器(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