定義:將一個(gè)類的接口轉(zhuǎn)化成客戶端希望的另外一個(gè)接口桃序。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
主要功能是進(jìn)行轉(zhuǎn)換匹配玛追,從而可以復(fù)用已有的功能甲献。通過(guò)給適配器對(duì)象組合被適配的對(duì)象,然后當(dāng)客戶端調(diào)用Target時(shí)立磁,適配器會(huì)將相應(yīng)的功能委托給被適配的對(duì)象去完成呈队。生活中的適配器模式很常見,比如電壓轉(zhuǎn)換器唱歧、翻譯等宪摧。
適配器模式中的3個(gè)角色
- Target 目標(biāo)角色
該角色定義把其他類轉(zhuǎn)換為何種接口,也就是期望接口迈喉。
public interface Target{
public void request();
}
- 目標(biāo)角色的實(shí)現(xiàn)類:
public class ConcreteTarget implements Target{
public void request(){
System.out.println("ConcreteTarget doing...");
}
}
- Adaptee 源角色
想把誰(shuí)轉(zhuǎn)換成目標(biāo)角色,這個(gè)“誰(shuí)”就是源角色温圆。它是已經(jīng)存在的挨摸、運(yùn)行良好的類或?qū)ο螅?jīng)過(guò)適配器的包裝岁歉,成為一個(gè)新的角色得运。
public class Adaptee{
public void doSomething(){
System.out.println("Adaptee doing...");
}
}
- Adapter 適配器角色
核心角色,其他兩個(gè)角色都是已經(jīng)存在的锅移,而適配器角色是需要新建的熔掺。它的職責(zé)就是把源角色轉(zhuǎn)換為目標(biāo)角色。
public class Adapter extends Adaptee implements Target{
public void request(){
super.doSomething();
}
}
- 場(chǎng)景類
public class Client{
public static void main(String[] args){
//原有的業(yè)務(wù)邏輯
Target target = new ConcreteTarget();
target.request();
//現(xiàn)在增加了適配器角色后的業(yè)務(wù)邏輯
Target target2 = new Adapter();
target2.request();
}
}
適配器的實(shí)現(xiàn)
適配器通常是一個(gè)類非剃,一般或讓其去實(shí)現(xiàn)Target接口置逻,然后再其具體實(shí)現(xiàn)里面調(diào)用Adaptee。
類的適配器模式
當(dāng)希望將一個(gè)類轉(zhuǎn)換成滿足另一個(gè)新接口的類時(shí)备绽,可以使用類的適配器模式券坞,創(chuàng)建一個(gè)新類,繼承原有的類Adaptee肺素,實(shí)現(xiàn)新的接口即可恨锚。
對(duì)象的適配器模式
當(dāng)希望將一個(gè)對(duì)象轉(zhuǎn)換成滿足另一個(gè)新接口的對(duì)象時(shí),可以創(chuàng)建一個(gè)Adapter類倍靡,持有原類Adaptee的一個(gè)實(shí)例猴伶,在Adapter類的方法中,調(diào)用實(shí)例的方法就行。
接口的適配器模式
當(dāng)不希望實(shí)現(xiàn)一個(gè)接口中所有的方法時(shí)他挎,可以創(chuàng)建一個(gè)抽象類Adapter筝尾,實(shí)現(xiàn)所有方法,我們寫別的類的時(shí)候雇盖,繼承抽象類即可忿等。
適配器模式的調(diào)用順序
優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 更好的復(fù)用性
- 剛好的可擴(kuò)展性
缺點(diǎn)
- 過(guò)多地使用會(huì)讓系統(tǒng)非常混亂崔挖,很難從整體進(jìn)行把握贸街。因此如果不是很有必要,可以不使用適配器狸相,而是直接對(duì)系統(tǒng)進(jìn)行重構(gòu)薛匪。
何時(shí)使用適配器
適配器模式的本質(zhì)是:轉(zhuǎn)換匹配,復(fù)用功能脓鹃。通過(guò)轉(zhuǎn)換已有的功能實(shí)現(xiàn)逸尖,從而可以將其匹配成所需的接口。轉(zhuǎn)換匹配是手段瘸右,復(fù)用功能是目的娇跟。
- 想使用一個(gè)已存在的類,但它的接口不符合需求時(shí)太颤“或者是它不能對(duì)每一個(gè)子類都進(jìn)行適配,這種情況下可以使用對(duì)象適配器龄章,直接適配這些子類的父類吃谣。
- 想創(chuàng)建一個(gè)可復(fù)用的類,但是這個(gè)類可能會(huì)與一些類不兼容時(shí)
如果覺得有用做裙,歡迎關(guān)注我的微信岗憋,有問(wèn)題可以直接交流: