1. 程式人生 > >介面卡模式之類介面卡與物件介面卡的區別及程式碼實現

介面卡模式之類介面卡與物件介面卡的區別及程式碼實現

什麼是介面卡模式?

介面卡模式(Adapter):直觀理解就是使原來不能一起相互工作(介面不相容)的兩個功能通過Adapter相容在一起。

類介面卡和物件介面卡

類介面卡

Adapter 類繼承Adaptee (被適配類),同時實現Target 介面(因為 Java 不支援多繼承,所以只能通過介面的方法來實現多繼承),在 Client 類中我們可以根據需要選擇並建立任一種符合需求的子類,來實現具體功能。

物件介面卡

不使用多繼承或繼承的方式,而是使用直接關聯,或者稱為委託的方式。

區別

類介面卡的重點在於類,是通過構造一個繼承Adaptee類來實現介面卡的功能;
物件介面卡的重點在於物件,是通過在直接包含Adaptee類來實現的,當需要呼叫特殊功能的時候直接使用Adapter中包含的那個Adaptee物件來呼叫特殊功能的方法即可。

Demo

類介面卡

// 已存在的、具有特殊功能、但不符合我們既有的標準介面的類
class Adaptee {
    public void specificRequest() {
        System.out.println("被適配類 具有特殊功能...");
    }
}

// 目標介面,或稱為標準介面
interface Target {
    public void request();
}

// 具體目標類,只提供普通功能
class ConcreteTarget implements Target {
    public void request() {
        System.out.println("普通類 具有普通功能..."
); } } // 介面卡類,繼承了被適配類,同時實現標準介面 class Adapter extends Adaptee implements Target{ public void request() { super.specificRequest(); } } // 測試類 public class Client { public static void main(String[] args) { // 使用普通功能類 Target concreteTarget = new ConcreteTarget();//例項化一個普通類
concreteTarget.request(); // 使用特殊功能類,即適配類 Target adapter = new Adapter(); adapter.request(); } }

測試結果:
普通類 具有普通功能…
被適配類 具有特殊功能…

物件介面卡

// 介面卡類,直接關聯被適配類,同時實現標準介面
class Adapter implements Target{
    // 直接關聯被適配類
    private Adaptee adaptee;

    // 可以通過建構函式傳入具體需要適配的被適配類物件
    public Adapter (Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    public void request() {
        // 這裡是使用委託的方式完成特殊功能
        this.adaptee.specificRequest();
    }
}

// 測試類
public class Client {
    public static void main(String[] args) {
        // 使用普通功能類
        Target concreteTarget = new ConcreteTarget();
        concreteTarget.request();

        // 使用特殊功能類,即適配類,
        // 需要先建立一個被適配類的物件作為引數
        Target adapter = new Adapter(new Adaptee());
        adapter.request();
    }
}

測試結果:
普通類 具有普通功能…
被適配類 具有特殊功能…