1.定義:
適配器模式是作為兩個不兼容的接口之間的橋梁冯键。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式窄坦,它結(jié)合了兩個獨立接口的功能拴驮。這種模式涉及到一個單一的類春瞬,該類負責(zé)加入獨立的不兼容的接口。
2.意圖
將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口套啤。適配器模式使得原本接口不兼容而不能一起工作的那些類可以在一起工作宽气。
3.優(yōu)點
- 可以讓任何兩個沒有關(guān)聯(lián)的類一起運行。
- 提高了類的復(fù)用
- 增加了類的透明度
- 靈活性好
4.缺點
- 過多地使用適配器潜沦,會讓系統(tǒng)非常零亂萄涯,不容易整體把握。
- 由于Java至多只能繼承一個類唆鸡,所以至多只能適配一個適配者類涝影,而且目標類必須是抽象類。
5.類的適配器模式
類的適配器模式是把適配類的API轉(zhuǎn)換成為目標類的API争占。
5.1 UML類圖
Target期待調(diào)用Request方法燃逻,但是Adaptee并沒有,解決的方法是通過一個適配器Adapter類臂痕,這個類繼承Adaptee并且實現(xiàn)Target接口伯襟,把Adaptee的API與Target的API進行的適配。
5.2 使用步驟
- 創(chuàng)建Target接口
public interface Target {
void request();
}
- 創(chuàng)建源類(Adaptee)
public class Adaptee {
//源目標握童,需要適配的方法
public void specificRequest(){
}
}
- 創(chuàng)建適配器姆怪,并且繼承Adaptee,實現(xiàn)Target
public class Adapter extends Adaptee implements Target {
/**
* 這里進行適配澡绩,當(dāng)調(diào)用調(diào)用request的方法的時候片效,實質(zhì)是調(diào)用了
* Adaptee的specificRequest();
*/
@Override
public void request() {
specificRequest();
}
}
- 具體的使用,通過Adapter類調(diào)用所需要的方法英古,解決目標類(Target)與源類(Adaptee)的沖突問題
public class AdapterPattern {
public static void main(String[] args){
Target target=new Adapter();
target.request();
}
}
6.對象的適配模式
對象的適配模式與類的適配模式相同,也是將適配類的API轉(zhuǎn)換成為目標類的API
不同點
與類的適配模式相同不同的是昙读,適配器Adapter與Adaptee的關(guān)系召调,不再是通過繼承的方式,而是通過聚合
的方式進行關(guān)聯(lián)。
6.1UML類圖
6.2使用步驟
- 創(chuàng)建Target接口
public interface Target {
void request();
}
- 創(chuàng)建源類(Adaptee)
public class Adaptee {
//源目標唠叛,需要適配的方法
public void specificRequest(){
}
}
- 創(chuàng)建適配器只嚣,實現(xiàn)Target接口,用聚合的方式關(guān)聯(lián)Adaptee類艺沼,在構(gòu)造函數(shù)中初始化Adaptee對象册舞。
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 類和對象適配器模式的優(yōu)缺點
- 類的適配器模式
- 優(yōu)點 :使用方便,代碼簡單障般。
- 缺點: 使用繼承的方式调鲸,是靜態(tài)的定義方式,存在高耦合挽荡,靈活性低的問題藐石。
- 對象適配模式
- 優(yōu)點: 通過對象聚合的方式,不再使用繼承的方式定拟,靈活性高于微,耦合性低。
- 缺點:使用復(fù)雜青自,需要傳入對象的實例株依。
如果兩者都可以適用的情況下,建議優(yōu)先選擇對象的適配器模式延窜,多用組合或者聚合恋腕,少用繼承的方式。詳細的內(nèi)容需曾,請參考下方的鏈接吗坚。