首頁 > 軟體

Java設計模式以虹貓藍兔的故事講解介面卡模式

2022-04-21 19:00:17

模式: 介面卡模式

案例: 虹貓利用火晶石催發火舞旋風劍氣

什麼是介面卡模式

介面卡模式(Adapter)的定義如下: 將一個類的介面轉換成客戶希望的另外一個介面,使得原本由於介面不相容而不能一起工作的那些類能一起工作。介面卡模式分為類結構型模式和物件結構型模式兩種,前者類之間的耦合度比後者高,且要求程式設計師瞭解現有元件庫中的相關元件的內部結構,所以應用相對較少些。

優點

1、使用者端通過介面卡可以透明地呼叫目標介面。

2、複用了現存的類,程式設計師不需要修改原有程式碼而重用現有的適配者類。

3、將目標類和適配者類解耦,解決了目標類和適配者類介面不一致的問題。

4、在很多業務場景中符合開閉原則。

缺點

1、介面卡編寫過程需要結合業務場景全面考慮,可能會增加系統的複雜性。

2、增加程式碼閱讀難度,降低程式碼可讀性,過多使用介面卡會使系統程式碼變得凌亂。

知識點

類介面卡模式: 可採用多重繼承方式實現,如 C++ 可定義一個介面卡類來同時繼承當前系統的業務介面和現有元件庫中已經存在的元件介面;Java 不支援多繼承,但可以定義一個介面卡類來實現當前系統的業務介面,同時又繼承現有元件庫中已經存在的元件。

物件介面卡模式: 可釆用將現有元件庫中已經實現的元件引入介面卡類中,該類同時實現當前系統的業務介面。現在來介紹它們的基本結構。

介面卡模式實現

案例: 虹貓利用火晶石催發火舞旋風劍氣

目標(Target)介面:長虹劍氣

適配者(Adaptee)類:火舞旋風劍氣

介面卡(Adapter)類:火晶石

虹貓目前只能催髮長虹劍氣,但是他想催發火舞旋風劍氣

只能藉助火晶石的力量來將長虹劍氣轉化為火舞旋風劍氣

注意: 我這裡是讓火舞旋風劍氣適配長虹劍氣

類介面卡

長虹劍氣

宣告一個長虹劍氣的介面,包含一個催動長虹劍氣的抽象方法

public interface Chang {
    void chang();
}

火舞旋風劍氣

火舞旋風劍氣類,宣告一個催發火舞旋風劍氣的方法。

public class Huo {
    public void huo() {
        System.out.println("火舞旋風劍氣");
    }
}

火晶石

火晶石類,繼承火舞旋風劍氣類(目的:繼承了就可以使用類裡面的方法),實現了長虹劍氣介面(目的:實現催髮長虹劍氣的方法)。在催髮長虹劍氣的方法中呼叫了催發火舞旋風劍氣的方法。

public class JingShi extends Huo implements Chang {
    @Override
    public void chang() {
        huo();
    }
}

測試

public class Demo {
    public static void main(String[] args) {
        Chang haha = new JingShi();
        haha.chang();
    }
}

物件介面卡

長虹劍氣

宣告一個長虹劍氣的介面,包含一個催動長虹劍氣的抽象方法

public interface Chang {
    void chang();
}

火舞旋風劍氣

火舞旋風劍氣類,宣告一個催發火舞旋風劍氣的方法。

public class Huo {
    public void huo() {
        System.out.println("火舞旋風劍氣");
    }
}

火晶石

火晶石類,實現了長虹劍氣介面,宣告了一個火舞旋風劍氣屬性,並實現了催髮長虹劍氣的方法。將催動火舞旋風劍氣的方法放在了催動長虹劍氣的方法中。

public class JingShi implements Chang {
    private Huo huo;
    JingShi() {
    }
    JingShi(Huo huo) {
        this.huo = huo;
    }
    @Override
    public void chang() {
        huo.huo();
    }
}

測試

new一個火舞旋風劍氣物件,new一個火晶石物件,並將火舞旋風劍氣物件傳入火晶石物件中。

public class Demo {
    public static void main(String[] args) {
        Huo huo = new Huo();
        Chang haha = new JingShi(huo);
        haha.chang();
    }
}

總結

類介面卡的重點在於類,是通過構造一個繼承Adaptee類來實現介面卡的功能;

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

到此這篇關於Java設計模式以虹貓藍兔的故事講解介面卡模式 的文章就介紹到這了,更多相關Java介面卡模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com