一龙巨、模式定義
將一個類的接口轉(zhuǎn)換成客戶端所期待的另一個接口武氓,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作钞脂。
Convert the interface of a class into another interface clients expect.Adapter lets classes work
together that couldn't otherwise because of incompatible interfaces.
二敛苇、模式結(jié)構(gòu)
2.1 類圖
-
Client
:客戶端竭鞍。調(diào)用自己需要的領(lǐng)域接口 Target匣椰。 -
Target
:目標角色裆熙。定義客戶端需要的跟特定領(lǐng)域相關(guān)的接口。 -
Adaptee
:源角色禽笑。已經(jīng)存在的接口入录,通常能滿足客戶端的功能要求,但是接口與客戶端要求的特定領(lǐng)域接口不一致佳镜,需要被適配僚稿。 -
Adapter
:適配器角色。適配器模式的核心角色蟀伸,其他兩個角色都是已經(jīng)存在的角色蚀同,而適配器角色時需要新建立的缅刽,它的職責非常簡單:把源角色轉(zhuǎn)換成目標角色。
2.2 代碼
Target:
public interface Target {
void request();
}
Adaptee:
public class Adaptee {
public void specificRequest() {
System.out.println("需要被適配的類蠢络!");
}
}
Adapter:
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
super.specificRequest();
}
}
Client:
public class Client {
public static void main(String[] args) {
Target target = new Adapter();
target.request();
}
}
三衰猛、模式講解
3.1 功能
適配器的主要功能是進行轉(zhuǎn)換匹配,目的是復用已有的功能刹孔,而不是來實現(xiàn)新的接口啡省。
適配器里面可以實現(xiàn)功能,稱這種適配器為智能適配器髓霞。在接口匹配和轉(zhuǎn)換的過程中卦睹,也有可能需要額外實現(xiàn)一定的功能,才能轉(zhuǎn)換過來方库,比如需要調(diào)整參數(shù)以進行匹配等分预。
3.2 常見實現(xiàn)
在實現(xiàn)適配器的時候,適配器通常是一個類薪捍,一般會讓適配器類去實現(xiàn)Target 接口笼痹,然后在適配器的具體實現(xiàn)里面調(diào)用 Adaptee。
3.3 優(yōu)缺點
優(yōu)點:
- 更好的復用性
- 更好的可擴展性
缺點:
- 過多地使用適配器酪穿,會讓系統(tǒng)非常零亂凳干,不容易整體進行把握
3.4 本質(zhì)
? 轉(zhuǎn)換匹配,復用功能被济。
適配器通過轉(zhuǎn)換調(diào)用已有的實現(xiàn)救赐,從而能把已有的實現(xiàn)匹配成需要的接口,使之能滿足客戶端的需要只磷。也就是說轉(zhuǎn)換匹配是手段经磅,而復用已有的功能才是目的。
3.5 應(yīng)用場景
- 如果你想要使用一個已經(jīng)存在的類钮追,但是它的接口不符合你的需求预厌,這種情況可以使用適配器模式,來把已有的實現(xiàn)轉(zhuǎn)換成你需要的接口元媚。
- 如果你想創(chuàng)建一個可以復用的類轧叽,這個類可能和一些不兼容的類一起工作,這種情況可以使用適配器模式刊棕,到時候需要什么就適配什么炭晒。
- 如果你想使用一些已經(jīng)存在的子類,但是不可能對每一個子類都進行適配甥角,這種情況可以選用對象適配器网严,直接適配這些子類的父類就可以了。