<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

    主站蜘蛛池模板: 毛片免费观看网址| 亚洲人xxx日本人18| 国产在线观看免费不卡| 无码AV片在线观看免费| 国产亚洲视频在线观看网址| 亚洲国产综合91精品麻豆| 亚洲区日韩区无码区| 色播在线永久免费视频| 亚洲成人在线免费观看| 可以免费观看的国产视频| 日韩电影免费在线观看网址 | 一边摸一边爽一边叫床免费视频| 亚洲精品高清国产麻豆专区| 国产综合亚洲专区在线| 免费大黄网站在线看| 在线A级毛片无码免费真人 | 中文字幕亚洲综合久久| 亚洲精品国产品国语在线| 可以免费观看一级毛片黄a| 成人免费视频软件网站| 18勿入网站免费永久| 98精品全国免费观看视频| 免费无码作爱视频| 国产无遮挡色视频免费观看性色| 色www免费视频| 99亚洲乱人伦aⅴ精品| 亚洲欧洲免费无码| 亚洲人成色在线观看| 456亚洲人成影院在线观| 久久精品国产亚洲AV忘忧草18 | 日韩亚洲国产高清免费视频| 人妻丰满熟妇无码区免费 | 亚洲av综合avav中文| 国产精品久久久亚洲| 亚洲AV午夜福利精品一区二区 | 亚洲一区二区三区高清在线观看| 亚洲国产成人精品激情| 亚洲av乱码一区二区三区| avtt天堂网手机版亚洲| 午夜在线a亚洲v天堂网2019| 亚洲中文字幕无码久久|