外觀模式

外觀模式(Facade),為子系統(tǒng)中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。

外觀模式結(jié)構(gòu)圖

外觀模式中的角色:

  • Facade:外觀類,知道哪些子系統(tǒng)類負(fù)責(zé)處理請求,將客戶端的請求代理給適當(dāng)?shù)淖酉到y(tǒng)對象。
  • Subsystem:子系統(tǒng)類,可以有一個或者多個子系統(tǒng)。實現(xiàn)子系統(tǒng)的功能,處理外觀類指派的任務(wù),注意子系統(tǒng)類不含有外觀類的引用。

外觀模式的簡單實現(xiàn)

(1)子系統(tǒng)

public class SubSystemOne {

    public void methodOne() {
        System.out.println("子系統(tǒng)方法1");
    }
}
public class SubSystemTwo {

    public void methodTwo() {
        System.out.println("子系統(tǒng)方法2");
    }
}

(2)外觀類

public class Facade {

    private SubSystemOne subSystemOne;
    private SubSystemTwo subSystemTwo;

    public Facade() {
        subSystemOne = new SubSystemOne();
        subSystemTwo = new SubSystemTwo();
    }

    public void methodA() {
        System.out.println("methodA");
        subSystemOne.methodOne();;
        subSystemTwo.methodTwo();
    }

    public void methodB() {
        System.out.println("methodB");
        subSystemOne.methodOne();;
        subSystemTwo.methodTwo();
    }
}

(3)客戶端調(diào)用

public class Client {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.methodA();
        facade.methodB();
    }
}

(4)輸出

methodA
子系統(tǒng)方法1
子系統(tǒng)方法2
methodB
子系統(tǒng)方法1
子系統(tǒng)方法2

外觀模式的使用場景

使用場景:
構(gòu)建一個有層次結(jié)構(gòu)的子系統(tǒng)時,使用外觀模式定義子系統(tǒng)中每層的入口點。如果子系統(tǒng)之間是相互依賴的,則可以讓其通過外觀接口進(jìn)行通信,減少子系統(tǒng)之間的依賴關(guān)系。
子系統(tǒng)往往會因為不斷重構(gòu)演化而變得越來越復(fù)雜,大多數(shù)的模式使用時也會產(chǎn)生很多很小的類,這給外部調(diào)用它們的用戶程序帶來了使用上的困難。我們可以使用外觀類提供一個簡單的接口,對外隱藏子系統(tǒng)的具體實現(xiàn)并隔離變化。
當(dāng)維護(hù)一個遺留的大型系統(tǒng)時,可能這個系統(tǒng)已經(jīng)非常男以維護(hù)和拓展,但因為它含有重要的功能,所以新的需求必須依賴于它,這時可以使用外觀類,為設(shè)計粗糙或者復(fù)雜的遺留代碼提供一個簡單的接口,讓新系統(tǒng)和外觀類交互,而外觀類負(fù)責(zé)與遺留的代碼進(jìn)行交互。

外觀模式的優(yōu)缺點

優(yōu)點:
減少系統(tǒng)的相互依賴,所有的依賴都是對外觀類的依賴,與子系統(tǒng)無關(guān)。
對用戶隱藏了子系統(tǒng)的具體實現(xiàn),減少用戶對子系統(tǒng)的耦合。這樣即使具體的子系統(tǒng)發(fā)生了變化,用戶也不會感知到。
加強了安全性,子系統(tǒng)中的方法如果不在外觀類中開通,就無法訪問到子系統(tǒng)中的方法。

缺點:
不符合開發(fā)封閉原則。如果業(yè)務(wù)出現(xiàn)變更,則可能要直接修改外觀類。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容