GOF23設計模式之迭代器模式(iterator)

1、迭代器模式概述

  提供一種能夠遍歷聚合對象的方式。又稱爲:遊標(cursor)模式java

  結構:ide

    (1)聚合對象:存儲數據測試

    (2)迭代器:遍歷數據this

2、迭代器模式示例代碼

  定義:正向遍歷迭代器和逆向遍歷迭代器spa

 1 /**
 2  * 自定義迭代器接口
 3  * @author CL
 4  *
 5  */
 6 public interface MyIterator {
 7     /**
 8      * 若是仍有元素能夠迭代,則返回 true
 9      * @return
10      */
11     boolean hasNext();
12     /**
13      * 返回迭代的下一個元素
14      * @return
15      */
16     Object next();
17     /**
18      * 從迭代器指向的集合中移除迭代器返回的最後一個元素
19      */
20     void remove();
21     
22 }
 1 import java.util.ArrayList;
 2 import java.util.List;
 3 
 4 /**
 5  * 自定義聚合類
 6  * @author CL
 7  *
 8  */
 9 public class ConcreteAggregate {
10     private List<Object> list;
11 
12     public ConcreteAggregate() {
13         list = new ArrayList<Object>();
14     }
15     
16     public boolean addObject(Object obj) {
17         return this.list.add(obj);
18     }
19     
20     public boolean removeObject(Object obj) {
21         return this.list.remove(obj);
22     }
23     
24     /**
25      * 得到正向遍歷的迭代器對象
26      * @return
27      */
28     public MyIterator creatIterator() {
29         return new ConcreteIterator(0);
30     }
31     
32     /**
33      * 得到逆向遍歷的迭代器對象
34      * @return
35      */
36     public MyIterator creatConverseIterator() {
37         return new ConcreteIterator(list.size()-1);
38     }
39     
40     /**
41      * 自定義迭代器內部類
42      * @author CL
43      *
44      */
45     private class ConcreteIterator implements MyIterator {
46         
47         private int cursor;
48         
49         private final int firstValue;
50         
51         public ConcreteIterator(int cursor) {
52             this.cursor = cursor;
53             this.firstValue = cursor;
54         }
55 
56         @Override
57         public boolean hasNext() {
58             if (firstValue == 0) {    //正向遍歷
59                 if (cursor < list.size()) {
60                     return true;
61                 }
62             } else if (firstValue == list.size()-1) {    //逆向遍歷
63                 if (cursor >= 0) {
64                     return true;
65                 }
66             }
67             return false;
68         }
69 
70         @Override
71         public Object next() {
72             if (firstValue == 0) {    //正向遍歷
73                 if (cursor < list.size()) {
74                     return list.get(cursor++);
75                 }
76             } else if (firstValue == list.size()-1) {    //逆向遍歷
77                 if (cursor >= 0) {
78                     return list.get(cursor--);
79                 }
80             }
81             return null;
82         }
83 
84         @Override
85         public void remove() {
86             list.remove(cursor);
87         }
88     }
89 }

  測試:code

 1 /**
 2  * 測試迭代器對象
 3  * @author CL
 4  *
 5  */
 6 public class Client {
 7 
 8     public static void main(String[] args) {
 9         ConcreteAggregate ca = new ConcreteAggregate();
10         ca.addObject("aa");
11         ca.addObject("bb");
12         ca.addObject("cc");
13         ca.addObject("dd");
14         
15         System.out.println("正向遍歷:");
16         MyIterator it = ca.creatIterator();
17         while (it.hasNext()) {
18             System.out.println(it.next());
19         }
20         
21         System.out.println("逆向遍歷:");
22         MyIterator it2 = ca.creatConverseIterator();
23         while (it2.hasNext()) {
24             System.out.println(it2.next());
25         }
26     }
27 }

  控制檯輸出:對象

正向遍歷:
aa
bb
cc
dd
逆向遍歷:
dd
cc
bb
aa

3、迭代器模式常見開發應用場景

  (1)JDK內置的迭代器(List / Set)blog

      List / Set 實現了 Collection 接口,Collection 實現了 Iterator 接口。接口

  (2)…………開發

相關文章
相關標籤/搜索