原理:將一個類的介面轉換成客戶希望的另一個介面。介面卡模式讓那些介面不相容的類可以一起工作。
角色:目標抽象類(Target): 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。
適配者類(Adaptee): 需要適配的類或適配者類。
介面卡類(Adapter): 通過包裝一個需要適配的物件,把原介面轉換成目標介面。
實現方式:
類介面卡模式:介面卡類實現目標抽象類介面,並繼承了適配者的類,在介面卡類的request()方法中呼叫所繼承的適配者類中對應的方法。適配者與介面卡是繼承關係。
物件介面卡模式:介面卡類繼承了目標抽象類,幷包裝了適配者的例項,適配者與介面卡是關聯關係。
public interface Target {
public void request();
}
public class Adaptee {
public void specialRequest(){
System.out.println("this is special request");
}
}
//類介面卡
public class ClassAdapter extends Adaptee implements Target{
@Override
public void request() {
specialRequest();
}
}
//物件介面卡
public class ObjectApdater implements Target{
Adaptee adaptee = new Adaptee();
@Override
public void request() {
adaptee.specialRequest();
}
}
預設介面卡模式:(單介面介面卡模式)當不需要實現一個介面所提供的所有方法時,可先設計一個抽象類實現該介面,併為介面中的每個方法提供一個預設實現(空方法),那麼抽象類的子類可以有選擇性的覆蓋父類的某些方法來實現需求。它適用於不想使用一個介面中的所有方法的情況。
雙向介面卡:介面卡中同時包含對目標類和介面卡類的引用,適配者通過它呼叫目標類中的方法,目標類也可以通過它呼叫介面卡類中的方法。