天天看點

設計模式第八篇-外觀模式

作者:java研習社
設計模式第八篇-外觀模式

一、引言

電商項目中一個常見場景:送出訂單操作,送出訂單後有很多後續動作,例如:檢查訂單, 建立訂單, 減庫存,建立支付連結等等,這些子類的内部操作都很複雜。如果我們的用戶端程式要直接跟這些内容子系統進行耦合,那麼用戶端就得随着子系統的改動而改動。送出訂單操作在一個電商系統中很多地方都會出現,如果每個地方都進行了耦合,那一旦進行改動是非常苦難的。

這個時候我們需要一個進階接口,将子系統包裝起來,提供一個用戶端可以通路系統的接口,将内部系統的複雜性隐藏起來,這就是外觀模式。

二、外觀模式

定義:外觀模式提供了一個統一的接口,用來通路子系統中的一群接口。外觀定義了一個高層接口,讓子系統更容易使用。

主要解決:降低通路複雜系統的内部子系統時的複雜度,簡化用戶端與之的接口。

何時使用: 1、用戶端不需要知道系統内部的複雜聯系,整個系統隻需提供一個"接待員"即可。 2、定義系統的入口。

如何解決:用戶端不與系統耦合,外觀類與系統耦合。

類圖:

設計模式第八篇-外觀模式

三、代碼實作

//檢查訂單
public class CheckOrder {
    public void check() {
        System.out.println("檢查訂單...");
    }
}
//建立訂單
public class AddOrder {
    public void add(){
        System.out.println("新增訂單...");
    }
}
//減庫存
public class SubInventory {
    public void sub(){
        System.out.println("減去庫存...");
    }
}
//下單外觀類
public class OrderFacade {
    private AddOrder addOrder;
    private CheckOrder checkOrder;
    private SubInventory subInventory;

    public OrderFacade(){
        addOrder=new AddOrder();
        checkOrder=new CheckOrder();
        subInventory=new SubInventory();
    }
    //入口方法
    public void order(){
        checkOrder.check();
        addOrder.add();
        subInventory.sub();
    }
}           

結果:

設計模式第八篇-外觀模式

四、總結

優點: 1、減少系統互相依賴。 2、提高靈活性。 3、提高了安全性。

缺點:不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合适。

使用場景: 1、為複雜的子產品或子系統提供外界通路的子產品。 2、子系統相對獨立。 3、預防低水準人員帶來的風險。

注意事項:在階層化結構中,可以使用外觀模式定義系統中每一層的入口

為幫助開發者們提升面試技能、有機會入職BATJ等大廠公司,特别制作了這個專輯——這一次整體放出。

大緻内容包括了: Java 集合、JVM、多線程、并發程式設計、設計模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等大廠面試題等、等技術棧!

設計模式第八篇-外觀模式

歡迎大家關注頭條【java研習社】,回複【111】,擷取以上最新Java後端架構VIP學習資料以及視訊學習教程,然後一起學習,一文在手,面試我有。

每一個專欄都是大家非常關心,和非常有價值的話題,如果我的文章對你有所幫助,還請幫忙點贊、好評、轉發一下,你的支援會激勵我輸出更高品質的文章,非常感謝!

設計模式第八篇-外觀模式
設計模式第八篇-外觀模式

繼續閱讀