迭代器模式(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 }

执行结果:

 

posted on 2019-12-28 11:17  Sempron2800+  阅读(150)  评论(0编辑  收藏  举报