適配器模式:將一個類的接口,轉(zhuǎn)換成客戶期望的另一個接口。適配器讓原來接口不兼容的類可以合作無間。 適配器又包含兩種,一種是對象適配器,另一種是類適配器。 兩者的區(qū)別:對象適配器采用組合的方式實(shí)現(xiàn),類適配器采用繼承的方式實(shí)現(xiàn)。
類適配器類圖: 適配器Adapter繼承Adaptee并實(shí)現(xiàn)Target接口來實(shí)現(xiàn)。
對象適配器類圖: 適配器Adapter實(shí)現(xiàn)Target接口,在request方法中調(diào)用Adaptee對象的具體實(shí)現(xiàn)。
下面結(jié)合充電器適配器的例子來說明。
類圖: 這個例子是通過適配器來使用安卓充電器給蘋果設(shè)備充電。chargeAdapter的實(shí)現(xiàn)方式不同決定了是類適配器還是對象適配器。
接口AndroidCharger代碼實(shí)現(xiàn):
public interface AndroidCharger { public void charge();}AndroidCharge類代碼實(shí)現(xiàn):
public class AndroidCharge implements AndroidCharger{ @Override public void charge() { // TODO Auto-generated method stub System.out.接口AppleCharger代碼實(shí)現(xiàn):public interface AppleCharger { public void charge();}AppleCharge類代碼實(shí)現(xiàn):
public class AppleCharge implements AppleCharger{ @Override public void charge() { // TODO Auto-generated method stub System.out.println("使用蘋果充電器充電..."); }}對象適配器ChargeAdapter代碼實(shí)現(xiàn):
public class ChargeAdapter implements AppleCharger{ AndroidCharger androidCharger; public ChargeAdapter(AndroidCharger androidCharger){ this.androidCharger = androidCharger; } @Override public void charge() { // TODO Auto-generated method stub androidCharger.charge(); }}類適配器ChargeAdapter2代碼實(shí)現(xiàn):
public class ChargeAdapter2 extends AndroidCharge implements AppleCharger{}Client類代碼實(shí)現(xiàn):
public static void main(String[] args){ AppleCharger appleCharger = new AppleCharge(); appleCharger.charge(); //使用對象適配器模式 AndroidCharger androidCharger = new AndroidCharge(); ChargeAdapter adapter = new ChargeAdapter(androidCharger); adapter.charge(); //使用類適配器模式 ChargeAdapter2 adapter2 = new ChargeAdapter2(); adapter2.charge(); }}運(yùn)行結(jié)果:
使用蘋果充電器充電...使用安卓充電器充電...使用安卓充電器充電...新聞熱點(diǎn)
疑難解答
圖片精選