首頁 > 軟體

Java十分鐘精通進階介面卡模式

2022-04-06 13:01:44

1、什麼是介面卡模式?

其實介面卡這三個字大家應該很熟悉,我們知道蘋果公司的手機iPhone已經不提供充電插頭了,包裝盒內只有一根傳輸線,那麼我們無法單獨使用這根傳輸線進行在220V的插板上充電,因此我們需要重新購買一個介面卡來把插板和手機連線起來,這就是介面卡。

其實在軟體設計中也可能出現,需要開發的具有某種業務功能的元件在現有的元件庫中已經存在,但它們與當前系統的介面規範不相容,如果重新開發這些元件成本又很高,這時用介面卡模式能很好地解決這些問題。

2、介面卡模式的定義

介面卡模式: 將一個類的介面轉換成客戶希望的另外一個介面,使得原本由於介面不相容而不能一起工作的那些類能一起工作。

介面卡模式分為類結構型模式和物件結構型模式兩種,前者類之間的耦合度比後者高,且要求程式設計師瞭解現有元件庫中的相關元件的內部結構,所以應用相對較少些。

3、介面卡模式的優缺點

優點:

  • 使用者端通過介面卡可以透明地呼叫目標介面
  • 複用了現存的類,程式設計師不需要修改原有程式碼而重用現有的適配者類
  • 將目標類和適配者類解耦,解決了目標類和適配者類介面不一致的問題
  • 在很多業務場景中符合開閉原則

缺點:

  • 介面卡編寫過程需要結合業務場景全面考慮,可能會增加系統的複雜性
  • 增加程式碼閱讀難度,降低程式碼可讀性,過多使用介面卡會使系統程式碼變得凌亂

4、介面卡模式的結構與實現

(以下結構參考自網際網路)

模式的結構:

  • 目標(Target)介面: 當前系統業務所期待的介面,它可以是抽象類或介面
  • 適配者(Adaptee)類: 它是被存取和適配的現存元件庫中的元件介面
  • 介面卡(Adapter)類: 它是一個轉換器,通過繼承或參照適配者的物件,把適配者介面轉換成目標介面,讓客戶按目標介面的格式存取適配者

類介面卡模式的結構:

物件介面卡模式的結構:

5、介面卡模式的程式碼實現

A、使用組合的方式實現介面卡:

我們現在有一臺筆記型電腦的插頭的三相的,但是我們現在需要使用二相的插頭進行充電,所以我們需要給這個插頭裝上一個二相的介面卡:

三相插座介面:

/**
 * 三相插座介面
 */
public interface ThreePlugIf {

    //使用三相電流供電
    public void powerWithThree();

}

國標的二相插座:

/**
 * 國標的二相插座
 */
public class GBTowPlug {
    public void powerWithTwo(){
        System.out.println("使用二相電流供電");
    }
}

筆電:

/**
 * 筆電
 */
public class NoteBook {

    private ThreePlugIf plug;

    public NoteBook(ThreePlugIf plug){
        this.plug = plug;
    }

    //使用插座充電
    public void charge(){
        plug.powerWithThree();
    }
}

三相轉二相的插座介面卡:

/**
 * 三相轉二相的插座介面卡
 */

public class TwoPlugAdapter implements ThreePlugIf {


    private GBTowPlug plug;

    public TwoPlugAdapter(GBTowPlug plug) {
        this.plug = plug;
    }

    @Override
    public void powerWithThree() {
        System.out.println("通過轉換");
        plug.powerWithTwo();
    }
}

測試類:

public class Test {

    public static void main(String[] args) {

    GBTowPlug two = new GBTowPlug();
    ThreePlugIf three = new TwoPlugAdapter(two);
    NoteBook nb = new NoteBook(three);
    nb.charge();
	}
}

輸出結果:

通過轉換
使用二相電流供電

採用組合方式的介面卡稱為物件介面卡

特點:

把“被適配者”作為一個物件組合到介面卡類中,以修改目標介面包裝給適配者

B、使用繼承的方式實現介面卡:

繼承介面卡:

/**
 * 採用繼承方式的插座介面卡
 */
public class TwoPlugAdapterExtends extends GBTowPlug implements ThreePlugIf{
    @Override
    public void powerWithThree() {
        System.out.println("藉助繼承介面卡");
        this.powerWithTwo();
    }
}

測試類:

public class Test {

    public static void main(String[] args) {

    GBTowPlug two = new GBTowPlug();
    ThreePlugIf three = new TwoPlugAdapter(two);
    NoteBook nb = new NoteBook(three);
    nb.charge();

    //使用繼承方法
    three = new TwoPlugAdapterExtends();
    nb = new NoteBook(three);
    nb.charge();
}
}

輸出:

通過轉換
使用二相電流供電

藉助繼承介面卡
使用二相電流供電

採用繼承方式的稱為類介面卡

特點:

通過多重繼承不相容介面,實現對目標介面的匹配,單一的為某個類而實現適配

6、介面卡模式的應用場景

  • 之前開發的系統存在滿足新系統功能需求的類,但其介面同新系統的介面不一致
  • 使用第三方提供的元件,但元件介面定義和自己要求的介面定義不同

最後,祝大家假期愉快~~~~

到此這篇關於Java十分鐘精通進階介面卡模式的文章就介紹到這了,更多相關Java 介面卡模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


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