<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    細心!用心!耐心!

    吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學業,五六點粗墨,七八筆買賣,九十道人情。

    BlogJava 聯系 聚合 管理
      1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
    在Java中提供有ArrayList類,您可以用它來設計一個動態的物件陣列,並在適當的時候取出陣列中的物件,假設今天您要循序的訪問ArrayList中的所有物件,則您可能採取這樣的方式:
    • Main.java
    import java.util.*;

    public class Main {
    public static void main(String[] args) {
    List arrayList = new ArrayList();

    for(int i = 0; i < 10; i++)
    arrayList.add("Test " + i);

    for(int i = 0; i < 10; i++)
    System.out.println(arrayList.get(i).toString());
    }
    }

    在這個例子中,很幸運的,您的ArrayList物件可以透過get()方法,使用索引加上迴圈的方式來循序訪問 ArrayList中的所有物件,不過並不是每一個聚合(aggregate)物件的內部實作都會是有索引結構的,也許是key/value的方式,或者是其它的方式。
    由於每個聚合物件的內部實作方式不盡相同,如果您想要循序的訪問聚合物件中所有的物件,您要為不同的聚合物件設計不同的循序訪問介面,然而這並不是個好方法,結果是您設計的聚合物件上將會有很多的循序訪問方法,而使用您的聚合物件的人,還必須知道這個聚合物件的類型,才能進一步知道如何使用它所提供的方法。

    與其在聚合物件上直接設計遍訪的介面,不如設計一個介面Iterator,上面設計有統一的循序訪問,當您想要循序訪問聚合物件中的物件時,將聚合物件中的物件加以包裝為一個Iterator後返回,客戶端只要面對Iterator所提供的介面,而不用面對為數眾多的聚合物件。

    採取迭代器(Iterator)的方法,一個迭代器提供一個特定的遍訪方法,而使得設計人員無需關心聚合物件的類型(可能是ArrayList或 LinkedList等),例如上面這個程式可以改為:
    • Main.java
    import java.util.*;

    public class Main {
    public static void main(String[] args) {
    List arrayList = new ArrayList();
    for(int i = 0; i < 10; i++)
    arrayList.add("Test " +i);
    visit(arrayList.iterator());
    }

    public static visit(Iterator iterator) {
    while(iterator.hasNext())
    System.out.println(iterator.next().toString());
    }
    }

    如上所示的,iterator()方法會傳回一個Iterator物件,這個物件提供的循序訪問的統一介面,如果您查詢 Java API中的LinkedList所提供的方法,您會發現它的iterator()方法同樣也傳回Iterator物件,您無需關心您所使用的是 ArrayList或LinkedList,使用Iterator可以讓您以相同的方法來遍訪聚合物件的內容,以上例來說,visit()方法就可以重用,它不特地服務於ArrayList或LinkedList。
    Iterator

    意這個模型是簡化過後的版本,並不是Java中的設計,這麼作只是為了方便說明,這個圖形說明了Iterator模式的基本結構。再來看另一個在 Thinking in Java的例子,可以說明使用Iterator的好處:
    • HamsterMaze.java
    import java.util.*; 

    class Hamster {
    private int hamsterNumber;
    Hamster(int i) { hamsterNumber = i; }
    public String toString() {
    return "This is Hamster #" + hamsterNumber;
    }
    }

    class Printer {
    static void printAll(Iterator e) {
    while(e.hasNext()) {
    System.out.println(e.next());
    }
    }
    }

    public class HamsterMaze {
    public static void main(String[] args) {
    ArrayList v = new ArrayList();
    for(int i = 0; i < 3; i++) {
    v.add(new Hamster(i));
    }
    Printer.printAll(v.iterator());
    }
    }

    對於Printer物件來說,它完全不用知道聚合物件的類型到底是ArrayList或是LinkedList,您只要傳回Iterator物件就可以了,剩下的就是使用Iterator物件所提供的循序訪問方法來訪問所有的物件。

    Iterator模式的 UML 結構圖如下所示:
    Iterator

    使用Iterator模式,可以將循序訪問聚合對象的方法從該對象中分離出來,從而使得聚合對象的設計單純化,對客戶來說,他所要知道的是所使用的 Iterator而不是聚合對象的類型。
    posted on 2007-04-17 10:47 張金鵬 閱讀(414) 評論(0)  編輯  收藏 所屬分類: Behavioral 模式
    主站蜘蛛池模板: 亚洲国产模特在线播放| 亚洲精品无码鲁网中文电影| 久久精品国产亚洲av日韩| a级精品九九九大片免费看| 亚洲中文字幕无码爆乳av中文| 伊人久久国产免费观看视频| 四虎永久免费地址在线网站| 免费大片黄在线观看| 又粗又大又硬又爽的免费视频| 朝桐光亚洲专区在线中文字幕| 国产又大又长又粗又硬的免费视频 | 四虎最新永久免费视频| 亚洲视频小说图片| 日韩精品成人无码专区免费| 亚洲国产精品无码久久| 亚洲成a人无码av波多野按摩| 一级毛片a免费播放王色| 国产亚洲人成无码网在线观看| 99爱免费观看视频在线| 亚洲一区二区三区91| 日本媚薬痉挛在线观看免费| 美女裸免费观看网站| 亚洲日本va中文字幕久久| 99爱免费观看视频在线| 亚洲熟妇av午夜无码不卡| 亚洲成aⅴ人片久青草影院| 91福利免费网站在线观看| 亚洲精品视频观看| 国产免费看插插插视频| 国产日韩一区二区三免费高清| 亚洲精品视频在线播放| 国产男女猛烈无遮挡免费视频网站 | 成年女人毛片免费视频| 久香草视频在线观看免费 | 国内精品久久久久影院亚洲| 亚洲国产精品人人做人人爱| 91成人在线免费视频| 99亚洲男女激情在线观看| 亚洲AV无码乱码国产麻豆穿越 | 一级做a免费视频观看网站| 久久综合亚洲鲁鲁五月天|