天天看點

設計模式 擴充卡模式之類擴充卡與對象擴充卡的差別及代碼實作什麼是擴充卡模式?類擴充卡和對象擴充卡Demo

什麼是擴充卡模式?

擴充卡模式(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();
    }
}
           

測試結果:

普通類 具有普通功能…

被适配類 具有特殊功能…

轉載:https://blog.csdn.net/qq_36982160/article/details/79965027

繼續閱讀