一、什麼是適配器 適配器是將一種介面改造成另外一種介面的一個包裝類; 二、補充說明 有兩種實現方式,一種是通過繼承,另外一種通過組合; 使用組合實現的時候,跟裝飾者模式有點類似,不過側重點不同,裝飾者模式是給對象增加新行為,適配器是為了適配介面; 優點:符合開閉原則;適配者類和目標類解耦;代碼復用;
重要程度:★★★★☆
一、什麼是適配器
適配器是將一種介面改造成另外一種介面的一個包裝類;
二、補充說明
有兩種實現方式,一種是通過繼承,另外一種通過組合;
使用組合實現的時候,跟裝飾者模式有點類似,不過側重點不同,裝飾者模式是給對象增加新行為,適配器是為了適配介面;
優點:符合開閉原則;適配者類和目標類解耦;代碼復用;
三、角色
目標介面
適配器類
適配者類
使用者
四、例子,JAVA實現
簡介:現有一個USB介面和一個PSP介面實現類,功能都是進行充電,該例子的目的就是對PSP介面實現類進行包裝,使之能用USB介面充電;
目標介面,使用USB介面充電
package com.pichen.dp.structuralpattern; public interface IUSB { public void charge(); }
一個USB介面的實現類(該類不屬於適配器模式中的角色,只是一個對比)
package com.pichen.dp.structuralpattern; public class HPUSB implements IUSB{ @Override public void charge() { System.out.println("使用惠普USB介面充電~"); } }
適配者類,使用PSP充電
package com.pichen.dp.structuralpattern; public class PSP { public void pspCharge(){ System.out.println("使用PSP介面充電~"); } }
適配器類(繼承方式),繼承PSP類,並實現IUSB介面
package com.pichen.dp.structuralpattern; public class PSPAdapter extends PSP implements IUSB{ @Override public void charge() { super.pspCharge(); } }
適配器類(組合方式),組合PSP對象,並實現IUSB介面
package com.pichen.dp.structuralpattern; public class PSPAdapter2 implements IUSB{ private PSP psp; public PSPAdapter2(PSP psp) { this.psp = psp; } @Override public void charge() { psp.pspCharge(); } }
使用者Main,測試結果
package com.pichen.dp.structuralpattern; public class Main { public static void main(String[] args) { IUSB usb = new HPUSB(); usb.charge(); IUSB usb_psp = new PSPAdapter();//繼承 usb_psp.charge(); IUSB usb_psp2 = new PSPAdapter2(new PSP());//組合 usb_psp2.charge(); } }
列印結果:
使用惠普USB介面充電~ 使用PSP介面充電~ 使用PSP介面充電~