<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
    您的電腦是個舊電腦,新的滑鼠都在使用USB接口了,而您的電腦上並沒有USB,而只有一個PS2接口,這時您可以使用一個USB轉PS2的接頭作為轉換,這樣您的電腦就可以使用新滑鼠了(當然您也可以使用USB擴充卡,意思是相同的)。

    類似的概念,有時候您想在原來的程式中加入一個外部元件,例如一個類別,但是這個類別與您目前所設計的程式在介面上並不一致,為了讓這個外部類與原程式的介面一致,您必須使用一個類別作為中介來配接它們,這時您可以採用Adapter模式。

    舉個例子來說,在Java 1.0中有個Enumeration,您在這個版本發行之後,使用它來設計了一個MessageApplication,例如:
    • MessageApplication.java
    import java.util.*;

    public class MessageApplication {
    public void showAllMessage(Enumeration enum) {
    Object msg;
    while(enum.hasMoreElements()) {
    msg = enum.nextElement();
    System.out.println(msg);
    }
    }
    }

    您的客戶端程式是這麼使用MessageApplication的:
    • MessageClient.java
    import java.util.*;

    public class MessageClient {
    private MessageApplication msgApp;

    public void run() {
    Vector vector = new Vector();
    for(int i = 0; i < 10; i++)
    vector.addElement("物件 " + i);

    msgApp = new MessageApplication();
    msgApp.showAllMessage(vector.elements());
    }

    public static void main(String[] args) {
    MessageClient msgClient = new MessageClient();
    msgClient.run();
    }
    }

    現在Java 1.2中新增了Iterator,您想要使用它的功能,但基本上您不想更動原來程式中已設計好的MessageApplication類別,這時候您可以使用Adapter模式,將Iterator的介面轉換為Enumeration相容,例如:
    • IteratorAdapter.java
    import java.util.*;

    public class IteratorAdapter implements Enumeration {
    private Iterator iterator;

    IteratorAdapter(Iterator iterator) {
    this.iterator = iterator;
    }

    // 轉接介面
    public boolean hasMoreElements() {
    return iterator.hasNext();
    }

    public Object nextElement()
    throws NoSuchElementException {
    return iterator.next();
    }
    }

    您可以在客戶端程式中照樣使用MessageApplication類別,而不用作任何的變動:
    • MessageClient.java
    import java.util.*;

    public class MessageClient {
    // We could still use MessageApplication
    private Enumeration iteratorAdapter;

    public void run() {
    List arrayList = new ArrayList();

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

    iteratorAdapter =
    new IteratorAdapter(arrayList.iterator());
    // We could still use MessageApplication
    MessageApplication msgApp = new MessageApplication();
    msgApp.showAllMessage(iteratorAdapter);
    }

    public static void main(String[] args) {
    MessageClient msgClient = new MessageClient();
    msgClient.run();
    }
    }

     

    如程式所示的,透過Adapter模式,您原有程式中已設計好的類別不用更動,就可以引進新類別的功能,將上面的程式UML類別結構畫出如下:
    Adapter

    上面的作法,是將要引進的新類別當作Adapter類別的一個物件成員,這是IbObject Adapter模式,其抽象結構如下:
    Adapter
    posted on 2007-04-17 10:41 張金鵬 閱讀(214) 評論(0)  編輯  收藏 所屬分類: Structural 模式
    主站蜘蛛池模板: 亚洲欧洲在线观看| 国产亚洲精品自在线观看| 亚洲精品美女久久久久| 日韩精品内射视频免费观看| 亚洲精品成人无码中文毛片不卡| 亚洲免费一区二区| 亚洲成A人片在线观看无码不卡| 亚洲免费日韩无码系列| 亚洲国产精品无码久久一区二区| 中国一级特黄的片子免费| 亚洲熟妇中文字幕五十中出| 91在线免费视频| 亚洲国产精品一区| 亚洲啪啪免费视频| 亚洲精品午夜国产va久久| 日产乱码一卡二卡三免费| 免费无遮挡无遮羞在线看 | 三上悠亚电影全集免费 | 久久性生大片免费观看性| 亚洲人成网站在线观看播放| 久久青草国产免费观看| 亚洲第一区视频在线观看| 成人午夜免费福利视频| 亚洲精品无码一区二区| 亚洲午夜福利精品久久| 日韩免费高清大片在线| 亚洲欧美不卡高清在线| 久久久久亚洲AV综合波多野结衣 | 国产成人高清精品免费鸭子| 春意影院午夜爽爽爽免费| 亚洲福利视频一区| 成人看的午夜免费毛片| 一级人做人爰a全过程免费视频 | 永久亚洲成a人片777777| 8888四色奇米在线观看免费看| 亚洲国产成人久久三区| 免费人成网站在线播放| 久久久久久久99精品免费| 亚洲熟妇AV一区二区三区宅男| 亚洲精品国产精品乱码不卞| 无码av免费一区二区三区试看|