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

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

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

    結構模式之Adapter——適配器模式

    1、簡介
        通常,客戶端通過類的接口訪問它提供的服務,有時,現有的類可以提供客戶類的功能需要,但是它所提供的接口不一定是客戶類所期望的。在這種情況下,現有的接口需要轉化為客戶類期望的接口,這樣保證了對現有類的重用,于是就需要用到適配器模式。適配器模式(Adapter)把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作,這種模式又稱為轉換器模式、變壓器模式、包裝(Wrapper)模式等。
        模式所涉及的角色有:
        目標(Target)角色:所期待得到的接口。
        源(Adaptee)角色: 需要適配的接口。
        適配器(Adapter)角色:適配器把源接口轉換成目標接口,根據這一角色的實現不同,可分為類適配器(Class Adapter)對象適配器(Object Adapter)
       
    類適配器是通過繼承類適配者類(Adaptee Class)實現的,另外類適配器實現客戶類所需要的接口。當客戶對象調用適配器類方法的時候,適配器內部調用它所繼承的適配者的方法。
        對象適配器包含一個適配器者的引用(reference),與類適配器相同,對象適配器也實現了客戶類需要的接口。當客戶對象調用對象適配器的方法的時候,對象適配器調它所包含的適配器者實例的適當方法。
       
        適配器模式的用意是將接口不同而功能相同或者相近的兩個接口加以轉換,包括適配器角色補充一些源角色沒有但目標接口需要的方法。但不要誤以為適配器模式就是為了補充源角色沒有的方法而準備的。
    類適配器(Class Adapter)
    對象適配器(Object Adapter)
     基于繼承概念  利用對象合成
     可以重載適配者的方法  不太容易重載適配者的方法
    如果需要改變多個已有的子類的接口,就要針對每一個子類做一個適配器類,而這不太實際。
    如果源中有大量的方法,使用類的適配器模式則比較容易(不需要一一寫出源類中的方法,而對象的適配器模式則要一一寫出目標角色中的方法,如缺省適配器)
    可以把多種不同的源適配到同一個目標,換言之,同一個適配器可以把源類和它的子類都適配到目標接口。
    增加的新方法可以同時適用所有的源。

    2、使用場景及能解決的問題
        系統需要使用現有的類,而此類的接口不符合系統的需要。
        想要建立一個可以重復使用的類,用于與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。這些源類不一定有  很復雜的接口。
        類或方法的作用相同但名稱不同的類或方法之間進行適配。

    3、類圖

    4、實例
        首先看看我們需要達成的目標類:
    package adapter;

    public interface MyTarget {
       
    public void request();

       
    public void specRequest();
    }
        在看看已經有的適配者:
    package adapter;

    public class Adaptee {
        
    public void specRequest() {
            System.out.println(
    "this is specRequest.");
        }
    }
        接下來是我們的核心——適配器,包括類適配器和對象適配器兩種實現方式:
    package adapter;

    public class ClassAdapter extends Adaptee implements MyTarget {
        
    public void request() {
            System.out.println(
    "this is request");
        }
    }

    package adapter;

    public class ObjectAdapter implements MyTarget {
        
    public void request(){
            System.out.println(
    "this is request");
        }

        
    public void specRequest(){
            adaptee.specRequest();
        }
        
    private Adaptee adaptee = new Adaptee();
    }
        最后是調用的Client:
    package adapter;

    public class Client {
       
    private static MyTarget ctarget = new ClassAdapter();
       
    private static MyTarget otarget = new ObjectAdapter();
       
    public static void main(String args[]){
        ctarget.request();
        ctarget.specRequest();
        otarget.request();
        otarget.specRequest();
       }
    }
      
    5、缺省的適配器模式
         缺省適配模式(Default Adapter Pattern)為一個接口提供缺省實現,這樣子類型可以從這個缺省實現進行擴展,而不必從原有接口進行擴展。

        適配器模式的用意是要改變源的接口,以便與目標類的接口相容。缺省適配的用意稍有同,它是為了方便建立一個不平庸的適配器類而提供的一種平庸實現(就是為接口提供空的實現)。

        在任何時候,如果不準備實現一個接口的所有方法時(一般在定義一個大的接口時都應該提供它的缺省適配類),就可以制造一個抽象類,給出所有方法的平庸的具體實現。這樣,從這個抽象類再繼承下去的子類就不必實現所有的方法了。缺省適配模式的中心是一個缺省適配類。這個類應當是抽象類。

    posted on 2008-06-19 16:49 云淡風清 閱讀(388) 評論(0)  編輯  收藏 所屬分類: Design Patterns

    <2008年6月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類(15)

    隨筆檔案(15)

    收藏夾(1)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 四虎影视永久免费观看网址| 国内精自视频品线六区免费| 又粗又黄又猛又爽大片免费| 亚洲日韩AV无码一区二区三区人| 国产va免费精品观看精品| 亚洲精品亚洲人成在线麻豆| 亚洲视频在线免费看| 亚洲国产成人九九综合| 成人免费午夜无码视频| 亚洲最大福利视频| 日本午夜免费福利视频| 人人鲁免费播放视频人人香蕉| 亚洲国产成人乱码精品女人久久久不卡 | 无码 免费 国产在线观看91| 免费一级毛片在线观看| 未满十八私人高清免费影院| 亚洲香蕉网久久综合影视| 嫩草在线视频www免费观看 | 日本免费一区二区三区| 亚洲成AV人综合在线观看| 国产成人免费高清激情视频| 亚洲AV成人精品日韩一区| 久久久久无码专区亚洲av| 午夜免费福利片观看| 亚洲AV综合色区无码二区爱AV| 日本黄页网站免费| 精品无码国产污污污免费网站国产| 亚洲精品私拍国产福利在线| 久久精品无码一区二区三区免费 | 亚洲av丰满熟妇在线播放| 亚洲免费人成视频观看| 伊人久久五月丁香综合中文亚洲| 国产免费拔擦拔擦8x| 免费无码黄网站在线看| 亚洲av一本岛在线播放| www.亚洲精品.com| 99热免费在线观看| 猫咪免费人成网站在线观看入口| 国产亚洲一区二区精品| 四色在线精品免费观看| 永久免费A∨片在线观看|