一、定义
迭代器(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 @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 }
四、JDK源码实现
参考:集合类的Iterator