標籤:des android style http ar color os 使用 sp
今天,我們要梳理一下java設計模式的適配器模式。
適配器嘛,想一想我們平常用的電來源配接器就知道了,就是把兩個不相容的東西搞通嘛,可以相互聯絡。
在java中也一樣,就是讓兩個需要一起協調的類,通過適配器協調起來就行了,就是講一個類的介面,轉換成客戶期望的另一個介面。適配器讓原本介面不相容的類可以合作無間。
首先我們來看兩個圖,我們通常會有這樣一個問題,廠商給我介面和我們現有介面對接不起來、舊的資料和新的資料接不起來等等。
解決這問題,在不改變原來兩個介面的情況下,我們完全可以在寫一個類,做個中間人,就像翻譯官一樣,我會兩國語言,你們說話都經過我來就行了,這個適配器實現了你說期望的介面,而且這個類也能和廠商的介面溝通。
總而言之,我們經常可以看到適配器出現在我們的代碼中,如在Android便充分利用了適配器來實現view和資料的聯絡,如:ListView和BaseAdapter。
我們舉一下一個小例子來說明一下適配器模式。
就拿我們首頁的圖來看,
我們國家的標準電壓是220v,而我們筆記本所需的電壓就15v左右;所以肯定不可以把我們的交流電直接接到筆記本上,這時,我們得有一個變壓器(電來源配接器)就可以了,把220v電壓轉換成15v;
下面介紹一下代碼:
筆記本類
/** * * 筆記本 * @author studyjun * */public class Jotter { private VoltageAdapter adapter; public VoltageAdapter getAdapter() { return adapter; } public void inputVoltage(){ System.out.println("筆記本得到輸入電壓" +adapter.transformVoltage()+"v"); } public void setAdapter(VoltageAdapter adapter){ this.adapter =adapter; }}
供電器220v,提供220v的電壓
/** * * 供電器 * @author studyjun * */public class PowerSupplyDevice { //標準電壓 private int standardVoltage =220; /** * 輸出220v電壓 * @return */ public int powerSupply(){ System.out.println("標準電壓提供220v"); return standardVoltage; }}
適配器介面,有個電壓轉換介面
/** * * 電來源配接器 * @author studyjun * */public interface VoltageAdapter { /** * 轉換電壓 */ public int transformVoltage();}
筆記本電來源配接器類,把220v轉為筆記本的15v的電壓
/** * * 電來源配接器 * @author studyjun * */public class MyVoltageAdapter implements VoltageAdapter{ private int voltage; //電壓 /** * 標準電壓裝置220v */ private PowerSupplyDevice powerSupplyDevice ; public MyVoltageAdapter(PowerSupplyDevice powerSupplyDevice) { this.powerSupplyDevice = powerSupplyDevice; } public int getVoltage() { return voltage; } public void setVoltage(int voltage) { this.voltage = voltage; } public PowerSupplyDevice getPowerSupplyDevice() { return powerSupplyDevice; } public void setPowerSupplyDevice(PowerSupplyDevice powerSupplyDevice) { this.powerSupplyDevice = powerSupplyDevice; } /** * 轉換電壓 */ public int transformVoltage(){ int voltage = powerSupplyDevice.powerSupply(); int lowerVoltage = voltage/14; System.out.println("轉化中電壓為="+lowerVoltage+"v"); return lowerVoltage; }}
測試
public class Test { public static void main(String[] args) { Jotter jt = new Jotter(); PowerSupplyDevice powerSupplyDevice = new PowerSupplyDevice(); VoltageAdapter adapter=new MyVoltageAdapter(powerSupplyDevice); jt.setAdapter(adapter); jt.inputVoltage(); } }
執行結果
講到這裡,我們總結一下適配器模式的優點和缺點:
優點:
1、可以將兩個不同的介面聯絡起來,耦合性低。
2、增加了類的透明性和複用性,將具體的實現封裝在適配者類中,對於用戶端類來說是透明的,而且提高了適配者的複用性
3、靈活性和擴充性都非常好,符合開閉原則
類適配器的缺點:
1、對於Java、C#等不支援多重繼承的語言,一次最多隻能適配一個適配者類,而且目標抽象類別只能為介面,不能為類,其使用有一定的局限性,不能將一個適配者類和他的子類同時適配到目標介面。
對象適配器還有的優點:
2、與類適配器模式相比,要想置換適配者類的方法就不容易。
原始碼下載:DesignPattern
Android設計模式--適配器模式--Adapter入門