配接器模式是一種使用頻率非常高的結構型設計模式,如果在系統中存在不兼容的介面,可以通過引入一個配接器來使得原本因為介面不兼容二不能一起作業的兩個類協同作業,
模式動機
我國的生活用電電壓是220V,而筆記本電腦、手機等電子設備的電壓都沒有這么高,這時候就需要電源配接器,使得生活用電和筆記本電腦可以兼容,軟體開發中采用類似電源配接器的設計和編碼技巧被稱為配接器模式,有時,現有類所提供的介面不一定是用戶所期待的,使用配接器可以對現有介面請求轉化為客戶期望的介面請求,
模式定義
將一個介面轉換成客戶希望的另一個介面,配接器模式使介面不兼容的那些類可以一起作業,其別名為包裝器(Wrapper),配接器模式既可以作為類結構型模式,也可以作為物件結構型模式,
模式結構
配接器模式包含如下角色:
-
Target(目標抽象類)
目標抽象類定義用戶要用的特定領域的介面,可以是抽象類或介面,也可以是具體類;在類配接器中,由于Java陳述句不支持多重繼承,它只能是介面,
-
Adapter(配接器類)
配接器類可以呼叫一個另一個介面,作為一個轉換器,對Adaptee和Target進行適配,在類配接器中,它通過實作Target介面并繼承Adaptee類使二者產生聯系,在物件配接器中,通過繼承Target并關聯一個Adaptee物件使二者產生聯系,
-
Adaptee(適配者類)
適配者即被適配角色,定義了一個已經存在的介面,這個介面需要適配,適配者類一般是一個具體類,包含了客戶希望使用的業務方法,在某些情況下甚至沒有適配者類的源代碼,
-
Client(客戶類)
在客戶類中針對目標抽象類進行編程,呼叫在目標抽象類中定義的業務方法,
類配接器模式

根據類配接器模式結構圖,適配者類Adaptee沒有request()方法,而客戶期待這個方法,但Adaptee中實作了specificRequest()方法,該方法所提供的實作正是客戶需要的,為了滿足客戶需要,配接器類Adapter實作抽象目標類介面并繼承適配者類,配接器類request()方法呼叫所繼承的適配者類的specificRequest()方法,實作適配的目的,
public class Adapter extends Adaptee implements Target {
public void request() {
specificRequest();
}
}
物件配接器模式

客戶需求與上述相同,Adapter包裝了一個適配者類,在配接器的request()方法中呼叫適配者的specificRequest()方法,
public class Adapter extends Target {
private Adaptee adaptee;
public Adapter() {
this.adaptee = adaptee;
}
public void request() {
adaptee.specificRequest();
}
}
默認配接器模式
當不需要全部實作介面提供的方法時,可先設計一個抽象類實作該介面,并為介面中每個方法提供一個默認實作(空方法),那么該抽象類的子類有選擇地覆寫父類的某些方法實作需求,在默認配接器中包含三個角色,分別是適配者介面、默認配接器類和具體業務類,
-
適配者介面
適配者是被適配的物件,介面中宣告了大量的方法
public interface ServiceInterface { public void serviceMethod1(); public void serviceMethod1(); public void serviceMethod1(); } -
默認配接器類
默認配接器類使用空方法形式實作在介面中宣告的方法
public abstract class AbstractServiceClass implements ServiceInterface { public void serviceMethod1(){}; public void serviceMethod1(){}; public void serviceMethod1(){}; } -
具體業務類
具體業務類是默認配接器類的子類,根據需要有選擇性地覆寫在配接器類中定義的方法
public class ConcreteServiceClass extends AbstractServiceClass { public void serviceMethod1(){ //具體實作 }; public void serviceMethod1(){ //具體實作 }; }
雙向配接器
如果在配接器中同時包含對目標類和適配者類的參考,適配者可以通過它呼叫目標類中方法,目標類也可以通過它呼叫配接器類中方法,那么該配接器就是一個雙向配接器,
上一站:軟體設計模式學習(九)單例模式
下一站:軟體設計模式學習(十一)橋接模式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/183092.html
標籤:其他
下一篇:軟體設計模式修煉 -- 橋接模式
