天天看點

Adapter 擴充卡模式

定義

擴充卡模式是作為兩個不相容的接口之間的橋梁。這種類型的設計模式屬于結構型模式,它結合了兩個獨立接口的功能。

這種模式涉及到一個單一的類,該類負責加入獨立的或不相容的接口功能。

我們給手機充電時,電源線頭頭就叫電源擴充卡,作用就是把220V電壓轉換成手機充電時使用的電壓,是以擴充卡很好了解。

優缺點

優點:

  • 可以讓任何兩個沒有關聯的類一起運作。
  • 提高了類的複用。
  • 增加了類的透明度。
  • 靈活性好

缺點:

  • 過多地使用擴充卡,會讓系統非常零亂,不易整體進行把握。比如,明明看到調用的是 A 接口,其實内部被适配成了 B 接口的實作。
  • 由于 JAVA 隻能單繼承,是以至多隻能适配一個适配者類,而且目标類必須是抽象類。

結構

  1. 目标(Target): 定義一個用戶端使用的特定接口 。
  2. 被适配者(Adaptee): 一個現存需要适配的接口。
  3. 擴充卡(Adapter): 該模式的核心。
  4. 用戶端(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();
    }
}

-----結果------
普通請求
特殊請求