<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

    主站蜘蛛池模板: 免费真实播放国产乱子伦| 午夜亚洲国产精品福利| 在线视频免费观看www动漫 | 亚洲a无码综合a国产av中文| 亚洲?V无码乱码国产精品| 亚洲阿v天堂在线2017免费| 亚洲国产另类久久久精品黑人 | 亚洲欧洲精品久久| 国产h视频在线观看免费| 亚洲va在线va天堂va手机| 在线观看亚洲免费视频| 中美日韩在线网免费毛片视频| 亚洲av无码国产精品色午夜字幕| 日韩免费无码视频一区二区三区| 亚洲大香人伊一本线| 亚洲成?Ⅴ人在线观看无码| 国产精品免费大片| 精品久久久久亚洲| 国产成人精品日本亚洲18图| 日韩一区二区三区免费体验| 在线免费观看亚洲| 一道本不卡免费视频| 亚洲精品精华液一区二区| 亚洲午夜福利AV一区二区无码| 成人a免费α片在线视频网站| 老司机69精品成免费视频| 亚洲AV成人一区二区三区观看| 亚洲AV美女一区二区三区| 成人av免费电影| 日本成年免费网站| 青柠影视在线观看免费| 成人免费观看男女羞羞视频 | 日韩免费高清一级毛片| ww亚洲ww在线观看国产| 亚洲精品无码av人在线观看| 国产精品无码一区二区三区免费| 亚州免费一级毛片| 又大又硬又爽又粗又快的视频免费 | 午夜色a大片在线观看免费| 无码国产精品一区二区免费式影视 | 操美女视频免费网站|