<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

    主站蜘蛛池模板: 亚洲伊人久久大香线蕉结合| 亚洲V无码一区二区三区四区观看 亚洲αv久久久噜噜噜噜噜 | 可以免费看黄的网站| 久久久久亚洲AV无码网站| 久久久久久AV无码免费网站| 亚洲精品无码久久久久sm| 日本免费A级毛一片| 亚洲天天在线日亚洲洲精| 亚洲一区免费在线观看| va天堂va亚洲va影视中文字幕 | 亚洲无砖砖区免费| 久久久久久99av无码免费网站| 亚洲精品无码一区二区| 亚洲高清国产拍精品青青草原| 一道本在线免费视频| 国产亚洲AV夜间福利香蕉149| 免费av片在线观看网站| 亚洲国产精品久久网午夜| 国产精品无码素人福利免费| 未满十八私人高清免费影院| 亚洲日产无码中文字幕| 最近免费中文字幕mv电影 | 一级**爱片免费视频| 亚洲αv在线精品糸列| 日韩一区二区a片免费观看| 精品国产_亚洲人成在线| 亚洲日韩aⅴ在线视频| 国产成人午夜精品免费视频| 老妇激情毛片免费| 久久精品国产亚洲夜色AV网站| 91精品免费国产高清在线| 久久精品熟女亚洲av麻豆 | 国产综合亚洲专区在线| 亚洲毛片在线免费观看| 国产亚洲精品精品精品| 亚洲av网址在线观看| 免费看美女被靠到爽| a级在线免费观看| 亚洲人成网站在线播放2019| 久久久久亚洲av毛片大| 114一级毛片免费|