概念:
將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以在一起工作阿逃。
解決的問(wèn)題:
即Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以在一起工作卧波。
使用場(chǎng)景:
- 我們?cè)谑褂玫谌降念悗?kù)时肿,或者說(shuō)第三方的API的時(shí)候,我們通過(guò)適配器轉(zhuǎn)換來(lái)滿足現(xiàn)有系統(tǒng)的使用需求港粱。
- 有動(dòng)機(jī)地修改一個(gè)正常運(yùn)行的系統(tǒng)的接口螃成,也就是我們的舊系統(tǒng)與新系統(tǒng)進(jìn)行集成的時(shí)候旦签,我們發(fā)現(xiàn)舊系統(tǒng)的數(shù)據(jù)無(wú)法滿足新系統(tǒng)的需求,這時(shí)應(yīng)該考慮使用適配器模式寸宏。
- 我們?cè)谑褂貌煌瑪?shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步宁炫。
注意事項(xiàng):
適配器不是在詳細(xì)設(shè)計(jì)時(shí)添加的,而是解決正在服役的項(xiàng)目的問(wèn)題氮凝。
核心代碼:
public class V5adapter implements Power{
private V220power v220power=new V220power();
@Override
public int provide() {
System.out.println("適配器插入電源羔巢,得到"+v220power.v220()+"V電壓");
/**經(jīng)過(guò)一系列操作*/
System.out.println("經(jīng)過(guò)轉(zhuǎn)換,220V-變成了5V");
System.out.println("最終輸出 5 V");
return 5;
}
}
power是接口(父類)規(guī)范罩阵,在不改變?cè)薪Y(jié)構(gòu)的情況下朵纷,新增一個(gè)power的實(shí)現(xiàn)類adapter(子類),在adapter中重寫(xiě)接口方法永脓,歷經(jīng)轉(zhuǎn)換(可以在原來(lái)基礎(chǔ)上修改袍辞,也可以接入新資源來(lái)實(shí)現(xiàn)),得到需要的資源和結(jié)果常摧。
完整demo
需要適配器修改的地方搅吁,原來(lái)的power是220V家用電源電壓,現(xiàn)在需要轉(zhuǎn)變?yōu)?V的手機(jī)充電電壓
/**
* Created by zhangjiqiang on 2016/12/29.
*/
public class Mobile {
public void inputPower(Power power){
System.out.println("手機(jī)充電中落午,使用的是"+power.provide()+"V電壓");
}
}
power接口定義
/**
* Created by zhangjiqiang on 2016/12/29.
*/
public interface Power {
public int provide();
}
家用電源谎懦,提供220V電壓
/**
* Created by zhangjiqiang on 2016/12/29.
*/
public class V220power implements Power{
private int power = 220;
public int provide(){
System.out.println("家用電源,提供"+this.power+"V電壓");
return 220;
}
}
適配器類溃斋,實(shí)現(xiàn)轉(zhuǎn)換電壓的功能
/**
* Created by zhangjiqiang on 2016/12/29.
*/
public class V5adapter implements Power{
private V220power v220power=new V220power();
@Override
public int provide() {
System.out.println("適配器插入電源界拦,得到"+v220power.provide()+"V電壓");
/**經(jīng)過(guò)一系列操作*/
System.out.println("經(jīng)過(guò)轉(zhuǎn)換,220V-變成了5V");
System.out.println("最終輸出 5 V");
return 5;
}
}
測(cè)試
/**
* Created by zhangjiqiang on 2016/12/29.
*/
public class Test {
public static void main(String[] args) {
Mobile mobile=new Mobile();
mobile.inputPower(new V5adapter());
}
}