模式概述: 將一個類的接口轉換成客戶但願的另一個接口。Adapter模式使得本來因爲接口不兼容而不能一塊兒工做的 那些類能夠在一塊兒工做。html
模式分類:a.類的適配器模式(採用繼承實現)java
b.對象適配器(採用對象組合方式實現)設計模式
模式要素:。(這裏拿變壓器來舉例說明,便於理解) 家用電壓220v.而USB電源爲5V電壓。ide
目標: 定義一個客戶端使用的特定接口。()測試
客戶: 使用目標接口,與和目標接口一致的對象合做。this
被適配器:一個現存須要匹配的接口。(家裏220V電源)spa
適配器:負責將被適配者的接口轉換成目標的接口。(電壓轉換器).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
《大話設計模式》