标签:
定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。
类型:行为类模式
类图:
1 public static void main(String[] args) { 2 List<Object> list = new ArrayList<Object>(); 3 list.add("a"); 4 list.add("b"); 5 list.add("c"); 6 Aggregate aggregate = new ConcreteAggregate(list); 7 Iterator iterator = aggregate.iterator(); 8 9 while (iterator.hasNext()) { 10 String o = (String) iterator.next(); 11 System.out.println(o); 12 } 13 } 14 15 } 16 17 interface Iterator { 18 19 public Object next(); 20 21 public boolean hasNext(); 22 23 } 24 25 class ConcreteIterator implements Iterator { 26 private List<Object> list; 27 private int cursor = 0;// 当前游标位置 28 29 public ConcreteIterator(List<Object> list) { 30 this.list = list; 31 32 } 33 34 public boolean hasNext() { 35 // TODO Auto-generated method stub 36 return !(cursor == list.size()); 37 } 38 39 public Object next() { 40 // TODO Auto-generated method stub 41 Object obj = null; 42 if (hasNext()) { 43 obj = list.get(cursor++); 44 } 45 return obj; 46 } 47 } 48 49 // 模拟集合接口 增删 差(遍历) 50 interface Aggregate { 51 52 public void add(Object obj); 53 54 public void remove(Object obj); 55 56 public Iterator iterator(); 57 58 } 59 60 class ConcreteAggregate implements Aggregate { 61 private List<Object> list; 62 63 public ConcreteAggregate(List<Object> list) { 64 this.list = list; 65 66 } 67 68 public void add(Object obj) { 69 list.add(obj); 70 71 } 72 73 public Iterator iterator() { 74 // TODO Auto-generated method stub 75 return new ConcreteIterator(list); 76 } 77 78 public void remove(Object obj) { 79 list.remove(obj); 80 81 } 82 83 }
迭代器模式的优缺点
迭代器模式的优点有:
迭代器模式的缺点:
迭代器模式的适用场景
迭代器模式是与集合共生共死的,一般来说,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像java中的Collection,List、Set、Map等,这些集合都有自己的迭代器。假如我们要实现一个这样的新的容器,当然也需要引入迭代器模式,给我们的容器实现一个迭代器。
但是,由于容器与迭代器的关系太密切了,所以大多数语言在实现容器的时候都给提供了迭代器,并且这些语言提供的容器和迭代器在绝大多数情况下就可以满足我们的需要,所以现在需要我们自己去实践迭代器模式的场景还是比较少见的,我们只需要使用语言中已有的容器和迭代器就可以了。
标签:
原文地址:http://www.cnblogs.com/snowbook/p/5207177.html