1.定義:
適配器模式是作為兩個(gè)不兼容的接口之間的橋梁。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個(gè)獨(dú)立接口的功能。這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)加入獨(dú)立的不兼容的接口。
2.意圖
將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。適配器模式使得原本接口不兼容而不能一起工作的那些類可以在一起工作。
3.優(yōu)點(diǎn)
- 可以讓任何兩個(gè)沒有關(guān)聯(lián)的類一起運(yùn)行。
- 提高了類的復(fù)用
- 增加了類的透明度
- 靈活性好
4.缺點(diǎn)
- 過多地使用適配器,會(huì)讓系統(tǒng)非常零亂,不容易整體把握。
- 由于Java至多只能繼承一個(gè)類,所以至多只能適配一個(gè)適配者類,而且目標(biāo)類必須是抽象類。
5.類的適配器模式
類的適配器模式是把適配類的API轉(zhuǎn)換成為目標(biāo)類的API。
5.1 UML類圖

image.png
Target期待調(diào)用Request方法,但是Adaptee并沒有,解決的方法是通過一個(gè)適配器Adapter類,這個(gè)類繼承Adaptee并且實(shí)現(xiàn)Target接口,把Adaptee的API與Target的API進(jìn)行的適配。
5.2 使用步驟
- 創(chuàng)建Target接口
public interface Target {
void request();
}
- 創(chuàng)建源類(Adaptee)
public class Adaptee {
//源目標(biāo),需要適配的方法
public void specificRequest(){
}
}
- 創(chuàng)建適配器,并且繼承Adaptee,實(shí)現(xiàn)Target
public class Adapter extends Adaptee implements Target {
/**
* 這里進(jìn)行適配,當(dāng)調(diào)用調(diào)用request的方法的時(shí)候,實(shí)質(zhì)是調(diào)用了
* Adaptee的specificRequest();
*/
@Override
public void request() {
specificRequest();
}
}
- 具體的使用,通過Adapter類調(diào)用所需要的方法,解決目標(biāo)類(Target)與源類(Adaptee)的沖突問題
public class AdapterPattern {
public static void main(String[] args){
Target target=new Adapter();
target.request();
}
}
6.對(duì)象的適配模式
對(duì)象的適配模式與類的適配模式相同,也是將適配類的API轉(zhuǎn)換成為目標(biāo)類的API
不同點(diǎn)
與類的適配模式相同不同的是,適配器Adapter與Adaptee的關(guān)系,不再是通過繼承的方式,而是通過聚合
的方式進(jìn)行關(guān)聯(lián)。
6.1UML類圖

image.png
6.2使用步驟
- 創(chuàng)建Target接口
public interface Target {
void request();
}
- 創(chuàng)建源類(Adaptee)
public class Adaptee {
//源目標(biāo),需要適配的方法
public void specificRequest(){
}
}
- 創(chuàng)建適配器,實(shí)現(xiàn)Target接口,用聚合的方式關(guān)聯(lián)Adaptee類,在構(gòu)造函數(shù)中初始化Adaptee對(duì)象。
public class Adapter implements Target {
private Adaptee mAdaptee;
public Adapter(Adaptee adaptee){
mAdaptee=adaptee;
}
@Override
public void request() {
mAdaptee.specificRequest();
}
}
- 具體的使用
public class AdapterPattern {
public static void main(String[] args){
Target target=new Adapter(new Adaptee());
target.request();
}
}
7 類和對(duì)象適配器模式的優(yōu)缺點(diǎn)
- 類的適配器模式
- 優(yōu)點(diǎn) :使用方便,代碼簡(jiǎn)單。
- 缺點(diǎn): 使用繼承的方式,是靜態(tài)的定義方式,存在高耦合,靈活性低的問題。
- 對(duì)象適配模式
- 優(yōu)點(diǎn): 通過對(duì)象聚合的方式,不再使用繼承的方式,靈活性高,耦合性低。
- 缺點(diǎn):使用復(fù)雜,需要傳入對(duì)象的實(shí)例。
如果兩者都可以適用的情況下,建議優(yōu)先選擇對(duì)象的適配器模式,多用組合或者聚合,少用繼承的方式。詳細(xì)的內(nèi)容,請(qǐng)參考下方的鏈接。