設計模式-外觀模式

介紹

現實生活中有許多外觀模式的例子,像餐館的服務員、一些企業的客戶人員、公司的前臺等等。
外觀模式(Facade Pattern)隱藏系統的復雜性,并向客戶端提供了一個客戶端可以訪問系統的接口。這種類型的設計模式屬于結構型模式,它向現有的系統添加一個接口,來隱藏系統的復雜性。
這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現有系統類方法的委托調用。

為什么要使用外觀模式?

讓外部不直接與內部進行交互,降低訪問復雜系統的內部子系統時的復雜度,簡化客戶端與之的接口。就像餐館一樣,你只需要知道菜的名字,而不需要知道菜是如何做的。
為子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
外觀模式的優點:

  1. 減少系統相互依賴。
  2. 提高靈活性。
  3. 提高了安全性。
  4. 松耦合關系。

實際應用

就比如系統中的登入功能,當你登入時可以選擇不同的登入方式,例如微信登入、QQ登入、手機號登入、郵箱登入等等。


這里寫圖片描述

中間的登入就是外觀模式的核心(Facade),它來區分用戶(client)選擇的是哪種登入,然后分發給不同的控制器(子系統角色Subsystem classes)

代碼實現

public class Facade {
    
    private Facade(){}
    
    /**
    * <p>Description:微信登入 </p>
    */
    private static void weChatLogin(){
        System.out.println("微信登入...");
    }
    
    /**
    * <p>Description: QQ登入</p>
    */
    private static void qqLogin(){
        System.out.println("QQ登入...");
    }

    /**
    * <p>Description: 手機號登入</p>
    */
    private static void phoneLogin(){
        System.out.println("手機號登入...");
    }
    
    /**
    * <p>Description: Email登入</p>
    */
    private static void emailLogin(){
        System.out.println("Email登入...");
    }
    
    /**
    * <p>Description: 其他方式登入</p>
    */
    private static void otherLogin(){
        System.out.println("Email登入...");
    }
    
    public static void login(String method){
        switch (method) {
        case "weChat":
            weChatLogin();
            break;
        case "qq":
            qqLogin();
            break;
        case "phone":
            phoneLogin();
            break;
        case "email":
            emailLogin();
            break;
        default:
            otherLogin();
            break;
        }
    }
    
    public static void main(String[] args) {
        String method = "weChat";
        Facade.login(method);
    }
    
}

代碼見github地址

總結

上面的代碼只是為了方便才把各個登入方式放在一個類中,實際開發中一般會變成好幾個services,如果博主理解錯了,希望你們批評指正,謝謝。
從設計模式上來看,外觀模式通過引入一個新的外觀類可以降低原有系統的復雜度,外觀類充當了客戶類與子系統類之間的“第三者”,同時降低客戶類與子系統類的耦合度。但是外觀模式最大的缺點在于違背了“開閉原則”,當增加新的子系統或者移除子系統時需要修改外觀類,可以通過引入抽象外觀類在一定程度上解決該問題,客戶端針對抽象外觀類進行編程。
所以不要因為要用設計模式而用設計模式,適用的才是最好的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 目錄 本文的結構如下: 什么是外觀模式 模式的結構 代碼示例 優點和缺點 適用環境 模式應用 模式擴展 補充 一、...
    w1992wishes閱讀 647評論 0 1
  • 文摘一:有些地方外觀模式也被叫做門面模式,英文即Facade Pattern,提前說明一下。 試想這種情況,用戶添...
    _淺墨_閱讀 499評論 0 1
  • 1 場景問題# 1.1 生活中的示例## 外觀模式在現實生活中的示例很多,比如:組裝電腦,通常會有兩種方案。 一個...
    七寸知架構閱讀 6,284評論 7 57
  • 今天我們來學習另一種結構型模式,它就是外觀模式(Facade Pattern)。 模式定義 外部與一個子系統的通信...
    HJXANDHMR閱讀 559評論 0 4
  • 原文地址:LoveDev 外觀模式(Facade Pattern):又稱為門面模式,為一組接口提供一個統一的入口。...
    KevinLive閱讀 453評論 0 2