定義
擴充卡模式是作為兩個不相容的接口之間的橋梁。這種類型的設計模式屬于結構型模式,它結合了兩個獨立接口的功能。
這種模式涉及到一個單一的類,該類負責加入獨立的或不相容的接口功能。
我們給手機充電時,電源線頭頭就叫電源擴充卡,作用就是把220V電壓轉換成手機充電時使用的電壓,是以擴充卡很好了解。
優缺點
優點:
- 可以讓任何兩個沒有關聯的類一起運作。
- 提高了類的複用。
- 增加了類的透明度。
- 靈活性好
缺點:
- 過多地使用擴充卡,會讓系統非常零亂,不易整體進行把握。比如,明明看到調用的是 A 接口,其實内部被适配成了 B 接口的實作。
- 由于 JAVA 隻能單繼承,是以至多隻能适配一個适配者類,而且目标類必須是抽象類。
結構
- 目标(Target): 定義一個用戶端使用的特定接口 。
- 被适配者(Adaptee): 一個現存需要适配的接口。
- 擴充卡(Adapter): 該模式的核心。
- 用戶端(Client): 使用目标接口,與和目标接口一緻的對象合作。
實作
Target
源角色接口,需要被替換的目标(接口)。
public interface Target {
public void request();
}
Adaptee
目标角色,用來替換的目标。
public class Adaptee {
public void specificRequest() {
System.out.println("特殊請求");
}
}
Adapter
Adapter擴充卡角色,它的職責是通過繼承或類關聯的方式把源角色轉換成目标角色。
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
super.specificRequest();
}
}
ConcreteTarget
源角色,需要被替換的目标。
public class ConcreteTarget implements Target {
@Override
public void request() {
System.out.println("普通請求");
}
}
Client(測試類)
public class Main {
public static void main(String[] args) {
//原有業務邏輯
Target target = new ConcreteTarget();
target.request();
//增加擴充卡後的業務邏輯
Target target2 = new Adapter();
target2.request();
}
}
-----結果------
普通請求
特殊請求