這篇文章講的是適配器模式,適配器模式其實(shí)在我們?nèi)粘I钪芯陀性S許多多的例子
例如插座轉(zhuǎn)接頭
車載充電器
還有許許多多其他的纸镊,我就不一一介紹了。其實(shí)設(shè)計(jì)模式中和真實(shí)世界中的適配器的作用都是一樣的主儡,都是講一個(gè)結(jié)構(gòu)轉(zhuǎn)換成另一個(gè)接口,以達(dá)到我們希望的結(jié)果惨缆。
介紹
適配器模式(Adapter Pattern## 標(biāo)題 ##)是作為兩個(gè)不兼容的接口之間的橋梁糜值。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個(gè)獨(dú)立接口的功能坯墨。適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口寂汇。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
適配器模式有兩種類型:類適配器模式和對(duì)象適配器模式捣染。因?yàn)轭愡m配器需要通過(guò)多重繼承進(jìn)行適配骄瓣,而JAVA又不支持多重繼承,所以這里主要講對(duì)象適配器耍攘,簡(jiǎn)單介紹類適配器榕栏。
結(jié)構(gòu)圖
對(duì)象適配器
類適配器
時(shí)序圖
案例
這里就用插座轉(zhuǎn)接頭做案例畔勤。
當(dāng)插座上只有一個(gè)三孔插座,而我們的手機(jī)充電器是兩孔的臼膏,這時(shí)該怎么辦你硼被?這時(shí)候我們就需要用一個(gè)兩孔插座轉(zhuǎn)三孔插座的適配器來(lái)適配了示损。如下圖
充電器類
public class Charger{
public void request(){
System.out.println("我是兩孔插座的充電器!");
}
}
插座接口
public interface Adaptee {
void transaledRequest();
}
三孔插座類
public class ThreeAdaptee implements Adaptee{
public void transaledRequest(){
System.out.println("插入三孔插座!");
}
}
適配器類
public class Adapter extends Charger {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
super();
this.adaptee = adaptee;
}
@Override
public void request() {
super.request();
System.out.println("兩孔轉(zhuǎn)三孔!");
adaptee.transaledRequest();
}
}
測(cè)試類
public class Client {
public static void main(String[] args) {
ThreeAdaptee adaptee = new ThreeAdaptee();
Adapter adapter = new Adapter(adaptee);
adapter.request();
}
}
測(cè)試結(jié)果
代碼見(jiàn)Github地址
總結(jié)
--
適配器模式的主要優(yōu)點(diǎn)是將目標(biāo)類和適配者類解耦渗磅,增加了類的透明性和復(fù)用性,同時(shí)系統(tǒng)的靈活性和擴(kuò)展性都非常好检访,更換適配器或者增加新的適配器都非常方便始鱼,符合“開(kāi)閉原則”;類適配器模式的缺點(diǎn)是適配器類在很多編程語(yǔ)言中不能同時(shí)適配多個(gè)適配者類脆贵,對(duì)象適配器模式的缺點(diǎn)是很難置換適配者類的方法医清。
在類適配器模式中,適配器類實(shí)現(xiàn)了目標(biāo)抽象類接口并繼承了適配者類卖氨,并在目標(biāo)抽象類的實(shí)現(xiàn)方法中調(diào)用所繼承的適配者類的方法会烙;在對(duì)象適配器模式中,適配器類繼承了目標(biāo)抽象類并定義了一個(gè)適配者類的對(duì)象實(shí)例筒捺,在所繼承的目標(biāo)抽象類方法中調(diào)用適配者類的相應(yīng)業(yè)務(wù)方法柏腻。