細心!用心!耐心!

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

          BlogJava 聯(lián)系 聚合 管理
            1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
          您的電腦是個舊電腦,新的滑鼠都在使用USB接口了,而您的電腦上並沒有USB,而只有一個PS2接口,這時您可以使用一個USB轉(zhuǎn)PS2的接頭作為轉(zhuǎn)換,這樣您的電腦就可以使用新滑鼠了(當然您也可以使用USB擴充卡,意思是相同的)。

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

          舉個例子來說,在Java 1.0中有個Enumeration,您在這個版本發(fā)行之後,使用它來設(shè)計了一個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();
          }
          }

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

          public class IteratorAdapter implements Enumeration {
          private Iterator iterator;

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

          // 轉(zhuǎn)接介面
          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模式,您原有程式中已設(shè)計好的類別不用更動,就可以引進新類別的功能,將上面的程式UML類別結(jié)構(gòu)畫出如下:
          Adapter

          上面的作法,是將要引進的新類別當作Adapter類別的一個物件成員,這是IbObject Adapter模式,其抽象結(jié)構(gòu)如下:
          Adapter
          posted on 2007-04-17 10:41 張金鵬 閱讀(219) 評論(0)  編輯  收藏 所屬分類: Structural 模式
          主站蜘蛛池模板: 景宁| 公主岭市| 同心县| 改则县| 日土县| 枞阳县| 香港| 名山县| 晋州市| 乌兰察布市| 富源县| 乌拉特前旗| 措美县| 潞城市| 栖霞市| 无为县| 新郑市| 醴陵市| 都匀市| 徐闻县| 郓城县| 鸡西市| 沿河| 云龙县| 湖北省| 大田县| 华安县| 阜城县| 万州区| 会昌县| 柞水县| 磐石市| 新兴县| 门头沟区| 贞丰县| 涞源县| 常熟市| 云霄县| 丹棱县| 平塘县| 剑河县|