我的漫漫程序之旅

          專注于JavaWeb開發(fā)
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數(shù)據(jù)加載中……

          Adapter設(shè)計模式的學(xué)習(xí)

          GOF《設(shè)計模式》一書對Adapter模式是這樣描述的:
            
           將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。Adapter模式使原本由于接口不兼容而不能一起工作的類可以一起工作。

          圖解 :





              這段話大致是說:我們需要一種方式,為一個功能正確但接口不合的對象創(chuàng)建一個新接口。例如,客戶給我們?nèi)缦滦枨螅?/span>

          1) 為都有“顯示”(display)行為的點、線、正方形分別創(chuàng)建類。

          2) 客戶對象不必知道自己到底擁有點、線、還是正方形。它只需知道擁有這些形狀中的一個。

          也就是說,我們要用一個更高層次的概念將這些具體形狀都涵蓋進去,這個高層概念可以稱為:“可顯示的形狀”。因此,我們需要創(chuàng)建一個接口Shape:

          interface Shape{

              publicvoid display();

          }

          現(xiàn)在客戶忽然間有讓我們給這個系統(tǒng)增加一個畫圓的功能。這個看起來很簡單,只需定義一個Circle類來實現(xiàn)Shape接口,但是我們要給它編寫display方法,這可不是件簡單的事,假如此時我們正好發(fā)現(xiàn)一個XXCircle類,它有一個方法剛好可以完成這個功能,那么有沒有更好的方法來利用它呢,這時我們就要用到Adapter模式了。XXCircle代碼如下:

          class XXCircle{

              public void displayCircle(){

                 System.out.println("通過XXCircle.displayCircle()畫圓");

              }

          }

              Adapter模式有兩種類型:

          1)    對象Adapter模式,它依賴于一個對象(適配器)包含另一個對象(被適配的對象)

          class CircleObject implements Shape{

              public XXCircle circle;

              public CircleObject(XXCircle xxcircle){

              circle=xxcircle;

              }

              public void display() {

                 circle.displayCircle(); 

              }

          }

          public class Client {

              public static void main(String[] args) {

                 XXCircle circle=new XXCircle();

                 CircleObject co=new CircleObject(circle);

                 co.display();

              }

          }

          2)     類Adapter模式,它是通過多重繼承來實現(xiàn)的(java中沒有多繼承,是通過接口來實現(xiàn)的)。

          class CircleClass extends XXCircle implements Shape{

              public void display() {

                 super.displayCircle();  

              }

          }

          public class Client {

              public static void main(String[] args) {

                 CircleClass cc=new CircleClass();

                 cc.display();

              }

          }

              小結(jié):Adapter模式是一個很常用的模式,它將一個(或多個)類的接口轉(zhuǎn)換成我們需要類所具備的一個接口。它的實現(xiàn)方式是:創(chuàng)建一個具備所需接口的類,然后包裝原有類的方法,這樣實際上就包含了被適配的對象。它主要適用于以下幾種情況:

          1) 你希望使用他人編寫的子程序或方法,因為你需要它所執(zhí)行的功能。

          2) 你無法將這個子程序直接加入程序中。

          3) 子程序的接口或調(diào)用方式與需要使用它的相關(guān)對象不完全相同。



          posted on 2008-05-23 15:00 々上善若水々 閱讀(1541) 評論(1)  編輯  收藏 所屬分類: 設(shè)計模式

          評論

          # re: Adapter設(shè)計模式的學(xué)習(xí)  回復(fù)  更多評論   

          謝謝分享。
          2012-09-10 14:57 | 葉楚鑫
          主站蜘蛛池模板: 连平县| 兴城市| 寿阳县| 鄯善县| 漳浦县| 务川| 忻城县| 高碑店市| 来宾市| 曲麻莱县| 永安市| 永丰县| 肇庆市| 平武县| 太白县| 临桂县| 湘乡市| 大方县| 南召县| 肇源县| 稷山县| 铜梁县| 翁源县| 曲阳县| 蒲城县| 扬中市| 历史| 远安县| 抚宁县| 广东省| 墨江| 景德镇市| 朝阳县| 遂川县| 增城市| 玛沁县| 怀仁县| 山西省| 讷河市| 大丰市| 大庆市|