1、定義
擴充卡模式把一個類的接口裝換成用戶端所期待的另一種接口,進而使原本因接口不比對而無法在一起工作的兩個雷能夠在一起工作。
2、使用場景
- 系統需要使用現有的類,而此類的接口不符合系統的需要,即接口不相容。
- 如果想建立一個可以複用的類,這個類可能和一些不相容的類一起工作。
- 需要一個統一的輸出接口,而輸入端的類型不可預知。
3、UML圖
4、代碼示例
public interface Target {
//用戶端期待的接口
public void request();
}
public class Adaptee {
//現有類已經實作的接口
public void specificRequest() {
}
}
//擴充卡
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
//轉調被适配者的的方法
this.adaptee.specificRequest();
}
}
5、對象擴充卡和類擴充卡
上述的實作方式稱為對象擴充卡,在擴充卡裡持有了被适配者的一個執行個體,通過該執行個體來調用被适配者的方法。
還有一種實作方式是繼承 Adptee 的方式,示例如下:
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
specificRequest();
}
}
這種通過繼承 Adaptee 并實作 Target 接口的方式稱為類擴充卡。
對象擴充卡使用組合的方式實作接口的相容效果,比類擴充卡要更為靈活,另一個好處是被适配對象中的方法不會暴露出來,而類擴充卡繼承了被适配者,被适配者的方法在Adapter裡也有,就使得 Adapter 裡出現了一些奇怪的接口,使用者使用成本較高。是以,對象擴充卡更加靈活、實用。