迭代器模式
迭代器(Iterator)模式的定义:
提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
迭代器模式是一种对象行为型模式,
在客户访问类与聚合类之间插入一个迭代器,这分离了聚合对象与其遍历行为,对客户也隐藏了其内部细节
抽象聚合(Aggregate)角色:
定义存储、添加、删除聚合对象以及创建迭代器对象的接口。
具体聚合(ConcreteAggregate)角色:
实现抽象聚合类,返回一个具体迭代器的实例。
抽象迭代器(Iterator)角色:
定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。
具体迭代器(Concretelterator)角色:
实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。
1 public class Iterator { 2 public static void main(String[] args) { 3 ConcreteAggregate a = new ConcreteAggregate(); 4 a.add(1); 5 a.add("小花"); 6 a.add(1.1); 7 a.remove(1); 8 Iteratoring iterator = a.getIterator(); 9 while (iterator.hasNext()) { 10 System.out.println(iterator.next()); 11 } 12 } 13 } 14 15 // 抽象迭代器 16 interface Iteratoring { 17 public boolean hasNext(); 18 19 public Object next(); 20 } 21 22 //具体迭代器 23 class Concretelterator implements Iteratoring { 24 25 private ArrayList<Object> li; 26 27 public Concretelterator(ArrayList<Object> li) { 28 this.li = li; 29 } 30 31 int count = 0; 32 33 @Override 34 public boolean hasNext() { 35 if (count < li.size()) { 36 return true; 37 } 38 return false; 39 } 40 41 @Override 42 public Object next() { 43 if (hasNext()) { 44 return li.get(count++); 45 } 46 return null; 47 } 48 } 49 50 //抽象聚合 51 interface Aggregate { 52 public void add(Object obj); 53 54 public void remove(Object obj); 55 56 public Iteratoring getIterator(); 57 } 58 59 //具体聚合 60 class ConcreteAggregate implements Aggregate { 61 62 private ArrayList arr = new ArrayList(); 63 64 @Override 65 public void add(Object obj) { 66 arr.add(obj); 67 } 68 69 @Override 70 public void remove(Object obj) { 71 arr.remove(obj); 72 } 73 74 @Override 75 public Iteratoring getIterator() { 76 return new Concretelterator(arr); 77 } 78 }
原文:https://www.cnblogs.com/loveer/p/11279526.html