html個人主頁制作seo運營學(xué)校
目錄
適配器模式概念
主要實現(xiàn)方式
主要組成
UML用例圖
代碼示例
生活場景
應(yīng)用場景
適配器模式概念
適配器模式屬于結(jié)構(gòu)型設(shè)計模式,它的主要目的是將一個類的接口轉(zhuǎn)換成客戶端所期望的另一種接口形式,使得原本接口不兼容的類可以一起工作。
主要實現(xiàn)方式
- 類適配器。類適配器的實現(xiàn)需要支持多繼承(如C++),因為該類型適配器是通過多繼承被適配者和目標(biāo)接口,由于目標(biāo)接口可以是抽象類或者接口,被適配者可以是類或接口。所以兩者都有可能是類。自然不適用于單繼承。
- 對象適配器。對象適配器不需要多繼承,單繼承就行(如Java)。該類型適配器通過將被適配器者作為屬性引用(就像Spring中的屬性注入)。這種方式更加靈活,因為它不依賴于被適配者的具體實現(xiàn),只需要知道它的接口即可。
主要組成
- 目標(biāo)接口(target)。?客戶端所期待的接口。目標(biāo)接口可以是抽象類或接口,定義了客戶端期望的方法。
- 被適配者(adaptee)。需要適配的類或接口。包含一些客戶端可能需要的方法,但接口形式與客戶端所期望的接口不兼容。
- 適配器(adapter)。適配器類是核心,它將被適配者的接口轉(zhuǎn)換成目標(biāo)接口。主要有兩種,類適配器和對象適配器。通過實現(xiàn)目標(biāo)接口,被適配者作為該類屬性以及傳入被適配者實例(適用對象適配器)或者繼承被適配者類(適用類適配器),目的調(diào)用被適配者的方法。最終返回一個目標(biāo)實例,也就是適配器實例,通過調(diào)用適配器中的方法,完成接口轉(zhuǎn)換。
UML用例圖
以對象適配器為例
代碼示例
?以對象適配器為例,舉個例子,生活中的插頭有兩腳的、三腳的,之間就需要轉(zhuǎn)換。接下來使用代碼將三腳轉(zhuǎn)為兩腳插頭使用。
兩腳插頭接口(目標(biāo))
// 兩腳插頭接口
public interface TwoPinPlug {void connectionTwoPin();
}
三腳插頭類(被適配者)
// 三角插頭接口
public interface ThreePinPlug {void connectionThreePin();
}// 三角插頭實現(xiàn)
public class ThreePinPlugImpl implements ThreePinPlug {@Overridepublic void connectionThreePin() {System.out.println("三角插頭連接成功");}
}
適配器類
// 適配器類,將三腳轉(zhuǎn)為兩腳,實現(xiàn)兩腳接口,成為兩腳接口的子類
public class PlugPinAdapter implements TwoPinPlug {// 三角(源)屬性注入private ThreePinPlug threePlug;// 有參構(gòu)造,傳入三腳(源)接口public PlugPinAdapter(ThreePinPlug threePlug) {this.threePlug = threePlug;}@Overridepublic void connection() {// 調(diào)用三腳(源)接口threePlug.connection();System.out.println("通過適配器轉(zhuǎn)換...");System.out.println("轉(zhuǎn)換成為兩腳插頭");}
}
客戶端
public class Client {public static void main(String[] args) {// 創(chuàng)建一個三腳插頭實例ThreePinPlugImpl threePlug = new ThreePinPlugImpl();// 創(chuàng)建插頭適配器,傳入三腳插頭實例,返回兩腳插頭實例TwoPinPlug twoPinPlug = new PlugPinAdapter(threePlug);// 執(zhí)行兩腳插頭實例方法(其實也是適配器中的方法)twoPinPlug.connectionTwoPin();}
}
結(jié)果
生活場景
- 耳機轉(zhuǎn)換頭:現(xiàn)在有的手機是沒有耳機插孔的,但是充電的地方其實也可以充當(dāng)耳機孔,這時候就需要耳機轉(zhuǎn)換的適配器,轉(zhuǎn)成手機支持的插孔。
- 電壓轉(zhuǎn)換器:生活中常見的充電器,就是將220V電壓轉(zhuǎn)換成充電設(shè)備支持的電壓。
應(yīng)用場景
- JDBC驅(qū)動程序:不同的數(shù)據(jù)庫提供商實現(xiàn)了不同的JDBC驅(qū)動接口,使用適配器模式可以將這些不同的接口適配為標(biāo)準(zhǔn)的JDBC接口,提高應(yīng)用程序的可移植性
- 處理器適配器(HandlerAdapter):SpringMVC工作流程中的出現(xiàn)的處理器適配器(HandlerAdapter),前端控制器(DispatcherServlet)會根據(jù)找到的處理器,選擇一個合適的HandlerAdapter。HandlerAdapter有多個實現(xiàn),用于適配不同類型的處理器。在這個過程中,處理器適配器(HandlerAdapter)起到了橋梁的作用,它連接了DispatcherServlet和具體的處理器(Controller),使得不同類型的處理器能夠被統(tǒng)一調(diào)用和執(zhí)行。