設計模式之適配者模式

模式概述 將一個類的接口轉換成客戶但願的另一個接口。Adapter模式使得本來因爲接口不兼容而不能一塊兒工做的                 那些類能夠在一塊兒工做。html

模式分類:a.類的適配器模式(採用繼承實現)java

                    b.對象適配器(採用對象組合方式實現)設計模式

模式要素:(這裏拿變壓器來舉例說明,便於理解) 家用電壓220v.而USB電源爲5V電壓。ide

  1. 目標:   定義一個客戶端使用的特定接口。()測試

  2. 客戶:   使用目標接口,與和目標接口一致的對象合做。this

  3. 被適配器:一個現存須要匹配的接口。(家裏220V電源)spa

  4. 適配器:負責將被適配者的接口轉換成目標的接口。(電壓轉換器).net



實現步驟:設計

1.首先家裏有個插座提供220V電壓。類名:Receptacle(插座)
該插座有個功能。即:提供220V電壓
code

public class Receptacle {
    public int provideHomeVoltage() {
        System.out.println("有一個插座提供220V電壓");
        return 220;
    }
}

2.定義適配器,這裏指變壓器,變壓器提供轉換接口。可轉換電壓

public interface TransformerAdapter {
     //轉換電壓
     public int transformVoltage();
}


public class TransformerDevice implements TransformerAdapter{
    Receptacle receptacle;
    public Receptacle getReceptacle() {
        return receptacle;
    }
    public void setReceptacle(Receptacle receptacle) {
        this.receptacle = receptacle;
    }
    @Override
    public int transformVoltage() {
        int volatage=receptacle.provideHomeVoltage();
        int lowerVolatage=volatage/44;
        System.out.println("轉化中電壓爲="+lowerVolatage+"v");
        return lowerVolatage;
    }
}

3.5V電源USB 設備

public class USBDevice {
     private TransformerAdapter adapter;
    public TransformerAdapter getAdapter() {
        return adapter;
    }
    public void setAdapter(TransformerAdapter adapter) {
        this.adapter = adapter;
    }
    //USB輸入電壓
    public void inputVoltage(){
        System.out.println("獲得輸入電壓" +adapter.transformVoltage()+"v");
    }
}


客戶:測試

public static void main(String[] args) {
        //定義一個插座
        Receptacle re=new Receptacle();
        //給插座供電
        re.provideHomeVoltage();
        //定義變壓器
        TransformerDevice transformerDevice=new TransformerDevice();
        //提供變壓器輸入電源
        transformerDevice.setReceptacle(re);
        //USB 5V電壓設備
        USBDevice usb=new USBDevice();
        //USB 鏈接一個變壓器
        usb.setAdapter(transformerDevice);
        //
        usb.inputVoltage();
    }


輸出:

這樣,對象適配器模式就完成啦。

類適配器就是將適配器繼承被適配者。

二者的區別有如下幾點

     1.類適配器模式須要建立自身來建立一個Receptacle

       對象適配器模式能夠直接使用一個已有的Receptacle的實例來轉換接口。

     2. 類適配器繼承了Adaptee,因此能夠經過覆寫來擴展provideHomeVoltage();

       對象適配器和Adaptee是包含關係不能擴展;(其實也能夠擴展的見下面)

     3.類適配器模式由於是繼承因此相對靜態,而對象適配器模式是包含是組合相對靈活(能夠經過寫Receptacle子類擴展功能)


想了想變壓器。在現實中的優缺點。獲得以下:

優勢:
 1.將兩個不一樣接口聯繫起來。耦合性低。
 2.主要將具體實現封裝在適配器中.(這個例子裏。電源轉換輸入輸出功能主要在變壓器中實現,而不是在插座內)
 3.靈活性和擴展性都很是好,符合開閉原則
缺點:
 1.過多的使用適配器,會使系統很是零亂。
 


參考:

http://blog.sina.com.cn/s/blog_629b701e0100zajs.html;

http://blog.csdn.net/jason0539/article/details/22468457

《大話設計模式》

相關文章
相關標籤/搜索