迭代器模式(Iterator)定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
迭代器模式的优点有:
1、访问一个聚合对象的内容而无须暴露它的内部表示。
2、遍历任务交由迭代器完成,这简化了聚合类。
3、它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。
4、增加新的聚合类和迭代器类都很方便,无须修改原有代码。
5、封装性良好,为遍历不同的聚合结构提供一个统一的接口。
聚合类:
1 public interface Aggregate { 2 public void add(Object obj); 3 public void remove(Object obj); 4 public Iterator getIterator(); 5 } 6 7 public class ConcreteAggregate implements Aggregate { 8 private List<Object> list = new ArrayList<Object>(); 9 10 public void add(Object obj) { 11 list.add(obj); 12 } 13 14 public void remove(Object obj) { 15 list.remove(obj); 16 } 17 18 public Iterator getIterator() { 19 Iterator i️terator = new ConcreteIterator(list); 20 return i️terator; 21 } 22 }
迭代器类:
1 public interface Iterator { 2 Object first(); 3 Object next(); 4 boolean hasNext(); 5 } 6 7 public class ConcreteIterator implements Iterator { 8 private List<Object> list = null; 9 private int index = -1; 10 11 public ConcreteIterator(List<Object> list) { 12 this.list = list; 13 } 14 15 public boolean hasNext() { 16 if (index < list.size() - 1) { 17 return true; 18 } else { 19 return false; 20 } 21 } 22 23 public Object first() { 24 Object obj = list.get(0); 25 return obj; 26 } 27 28 public Object next() { 29 Object obj = null; 30 if (this.hasNext()) { 31 obj = list.get(++index); 32 } 33 return obj; 34 } 35 }
调用方式:
1 public class ConcreteIterator implements Iterator { 2 private List<Object> list = null; 3 private int index = -1; 4 5 public ConcreteIterator(List<Object> list) { 6 this.list = list; 7 } 8 9 public boolean hasNext() { 10 if (index < list.size() - 1) { 11 return true; 12 } else { 13 return false; 14 } 15 } 16 17 public Object first() { 18 Object obj = list.get(0); 19 return obj; 20 } 21 22 public Object next() { 23 Object obj = null; 24 if (this.hasNext()) { 25 obj = list.get(++index); 26 } 27 return obj; 28 } 29 }
执行结果: