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

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

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

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    Adapter設計模式的學習

    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) 子程序的接口或調用方式與需要使用它的相關對象不完全相同。



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

    評論

    # re: Adapter設計模式的學習  回復  更多評論   

    謝謝分享。
    2012-09-10 14:57 | 葉楚鑫
    主站蜘蛛池模板: 日韩视频免费一区二区三区| 国产免费69成人精品视频| 免费在线观看日韩| 五月天婷婷免费视频| 国产综合亚洲专区在线| 成人网站免费大全日韩国产 | 亚洲一本到无码av中文字幕| 成人免费福利视频| 亚洲精华国产精华精华液网站| 久久夜色精品国产亚洲AV动态图 | 男人j进入女人j内部免费网站| 亚洲国产日韩在线一区| 91免费播放人人爽人人快乐| 亚洲伊人色一综合网| 国产成人免费高清在线观看| 亚洲aⅴ无码专区在线观看春色| 最近2018中文字幕免费视频| 亚洲伦理一二三四| 区久久AAA片69亚洲| 国产一级淫片a视频免费观看| 亚洲av无码一区二区乱子伦as| 亚洲午夜理论片在线观看| 亚洲av永久无码精品漫画| 亚洲人成影院在线高清| 日韩一级免费视频| 免费无码午夜福利片69| 亚洲精品无码乱码成人| 最近免费字幕中文大全视频| 国产精品亚洲四区在线观看| 亚洲 自拍 另类小说综合图区| 中文在线免费不卡视频| 亚洲一区二区三区精品视频| 又爽又高潮的BB视频免费看| 99久久免费国产特黄| 亚洲国产成人精品无码区在线秒播| 国产jizzjizz免费视频| 色欲色香天天天综合网站免费| 亚洲中文字幕乱码一区| 亚洲乱码精品久久久久..| 亚洲高清中文字幕免费| fc2免费人成在线视频|