1. 程式人生 > >Java設計模式——介面卡模式

Java設計模式——介面卡模式

設計目的: 使舊介面相容新介面,不改或少改原業務程式碼

使用場景: 公司系統框架上有一個介面A,程式設計師為了實現業務,建立一個實現了介面A的類並且在業務程式碼上大量使用介面A提供的方法。過了幾個月,公司由於某種原因,要求放棄舊介面A,改用新介面B,但是舊介面A的實現類已經被大量使用在業務程式碼了,直接實現介面B需要修改大量程式碼,很容易造成大面積的bug。

使用介面卡模式解決上述問題

類圖

這裡寫圖片描述

白話描述:把介面B“塞到”實現了A介面的具體類ImplA(建立關聯關係)。通過ImplA的方法,呼叫介面B對應的方法。打個比方,在ImplA的send()方法裡,呼叫InterfaceB的sendMsg()。這樣的話原業務程式碼就不需要進行過多的改動。

程式碼

//舊介面A
public interface InterfaceA {
    public void send();
    public void receive();
    public void close();
}
//實現類ImplA
public class ImplA implements InterfaceA {
    InterfaceB implB;

    //構造程式碼塊,建立ImplA例項時就會執行
    {
        implB = new ImplB();
    }

    @Override
    public void send
() { implB.sendMsg();//刪除了原本send()的實現程式碼,改為呼叫implB.sendMsg的方法 } @Override public void receive() { implB.receiveMsg(); } @Override public void close() { implB.closeMsg(); } }
//新介面B
public interface InterfaceB {
    public void sendMsg();
    public
void receiveMsg(); public void closeMsg(); public void other(); }
//實現類ImplB
public class ImplB implements InterfaceB {

    @Override
    public void sendMsg() {
        System.out.println("this is a new interface send method");
    }

    @Override
    public void receiveMsg() {
        System.out.println("this is a new interface receive method");
    }

    @Override
    public void closeMsg() {
        System.out.println("this is a new interface close method");
    }

    @Override
    public void other() {
        System.out.println("this is a new interface method");
    }
}
//原業務程式碼,真正的專案可能會有上千個地方使用這段程式碼
public class Main {
    public static void main(String[] args) {
        InterfaceA implA = new ImplA();
        implA.send();
        implA.receive();
        implA.close();
    }
}

輸出結果:
this is a new interface send method
this is a new interface receive method
this is a new interface close method

看程式碼可以很容易理解,舊介面A裡面的方法直接呼叫新介面的方法,業務程式碼基本不需要變動。
同時,也體驗了面向物件的特點——封裝。使用者(業務程式碼)不需要關心物件內部程式碼如何實現。

另外,值得一提的是,舊介面可以傳入N個新介面,implB、implC。。。然後在實現方法中組合使用。當然這樣在設計上看起來有點像“策略模式”,但沒關係它仍然算是介面卡模式。

23種設計模式只是前人在面向介面的設計思想的總結,說白了只是常用於 設計 “高內聚,低耦合”系統的經驗。
學習設計模式的目的是把“六大原則”融匯貫通。