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

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

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

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

        這段話大致是說:我們需要一種方式,為一個功能正確但接口不合的對象創建一個新接口。例如,客戶給我們如下需求:

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

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

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

    interface Shape{

        publicvoid display();

    }

    現在客戶忽然間有讓我們給這個系統增加一個畫圓的功能。這個看起來很簡單,只需定義一個Circle類來實現Shape接口,但是我們要給它編寫display方法,這可不是件簡單的事,假如此時我們正好發現一個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模式,它是通過多重繼承來實現的(java中沒有多繼承,是通過接口來實現的)。

    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();

        }

    }

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

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

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

    3) 子程序的接口或調用方式與需要使用它的相關對象不完全相同。

    posts - 146, comments - 143, trackbacks - 0, articles - 0

    Copyright © flustar

    主站蜘蛛池模板: 免费在线观看黄色毛片| 精品国产污污免费网站aⅴ| 国产乱子伦精品免费无码专区 | 岛国片在线免费观看| 亚洲av日韩av无码av| 手机在线毛片免费播放| 亚洲Av无码一区二区二三区| 亚洲香蕉免费有线视频| 亚洲国产精品综合福利专区| 国产桃色在线成免费视频| 亚洲熟女综合一区二区三区| 日韩高清在线免费观看| 朝桐光亚洲专区在线中文字幕 | 亚洲人成电影福利在线播放| 6080午夜一级毛片免费看6080夜福利| 亚洲国产成人无码av在线播放 | 亚洲国产综合人成综合网站| 成人无码精品1区2区3区免费看| 国产亚洲成av人片在线观看| 7m凹凸精品分类大全免费| 亚洲一本之道高清乱码| 国产成人免费片在线视频观看| 青青青视频免费观看| 亚洲AV成人片色在线观看高潮| 国产精品怡红院永久免费| 亚洲heyzo专区无码综合| 亚洲国产成人精品无码久久久久久综合 | 亚洲国产日韩一区高清在线| 免费AA片少妇人AA片直播| 精品久久久久久亚洲中文字幕| 亚洲中文字幕在线乱码| 国产精彩免费视频| 美女裸免费观看网站| 亚洲福利视频导航| 午夜一级毛片免费视频| 丝瓜app免费下载网址进入ios| 亚洲国产成人资源在线软件 | 久久久久久亚洲精品中文字幕| 青青草免费在线视频| baoyu122.永久免费视频| 99999久久久久久亚洲|