1. 程式人生 > >通俗易懂設計模式解析——外觀模式

通俗易懂設計模式解析——外觀模式

前言

  今天一起來看看外觀模式,外觀模式也是我們介紹的結構型設計模式的第五個模式了。外觀外表,有句話是這麼說的人靠衣裝 佛靠金裝。打扮的好,整理的好。外觀靠上去整整齊齊,精氣神一下就上來了。在開發中依然如此。客戶端完成一個功能,可能需要呼叫許多的介面來配合。按照開發邏輯一個一個依次對接下來。客戶端程式碼複雜,看上去一團糟。不說其他的,就表面上看起來就不怎麼好吧。那麼不如我們把呼叫的介面進行再次的封裝。統一規範。這樣整理下來。客戶端就明瞭多了。

外觀模式介紹

一、來由

  在軟體系統開發中,我們經常會遇到客戶端與內部子系統進行負責耦合的情況。從而導致客戶端隨著子系統的變化而變化。為了解決客戶端與子系統直接的高耦合,並且簡化介面的呼叫。也就有了外觀模式。

二、意圖

  為子系統中的一組介面提供一個一致的介面,外觀模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。

三、案例圖

 

 

 

四、外觀模式程式碼示例

  看上面我們發現外觀模式包含以下角色:

    外觀角色:在客戶端呼叫外觀角色的方法,其中與一個或多個子系統相關聯。在執行情況下,客戶端請求傳遞到外觀角色然後傳遞給對應的子系統。

    子系統:在軟體系統中包含一個或者多個子系統,子系統可以單獨被客戶端呼叫,子系統不知道外觀角色的存在。相對而言,也可以當外觀角色為客戶端。

 

  我們看這麼一個案例,通過案例我們來詳細瞭解外觀模式到底是怎麼一回事以及如何執行的。例如我們現在有的軟體系統。新使用者在輸入手機號填入驗證碼就登入註冊都搞定了。同時還附加了一些第一次登入註冊的獎勵。如果不按外觀模式來的話,我們在登入按鈕後面的客戶端依次呼叫了註冊、登入、贈送獎勵等等方法。那麼我們看看外觀模式如何解決呢:

 

namespace Facade_Pattern
{ 

    #region 外觀角色
    public class FacadePattern
    {
        private RegisteredClass registeredClass;
        private LoginClass loginClass;
        private SendClass sendClass;
        public FacadePattern() 
        {
             registeredClass = new RegisteredClass();
            loginClass = new LoginClass();
            sendClass = new SendClass();
        }
        public  void LoginFirst() 
        {
            registeredClass.Registered();
            loginClass.Login();
            sendClass.Send();
        }
    }
    #endregion

    #region 子系統
    public class RegisteredClass 
    {
        public  void Registered() 
        {
            Console.WriteLine("註冊成功");
        }
    }
    public class LoginClass 
    {
        public  void Login()
        {
            Console.WriteLine("登入成功");
        }
    }
    public class SendClass 
    {
        public  void Send()
        {
            Console.WriteLine("贈送成功");
        }
    }
    #endregion
}

 

    class Program
    {
        static void Main(string[] args)
        {
            //第一次註冊登入
            FacadePattern facadePattern = new FacadePattern();
            facadePattern.LoginFirst();
             
        }
    }

 

使用場景及優缺點

  在軟體開發中,外觀模式提供了一個統一的介面,用來訪問那麼一群介面,相當與外觀模式是一個高層介面,使子系統使用更加方便,避免了客戶端與子系統之間的緊耦合。客戶端直接通過呼叫外觀角色就可以呼叫子系統中的方法了。

一、使用場景

1、為複雜的模組或子模組提供外界訪問的模組

2、提供子系統的獨立性

3、在層次分明的結構下可以使用外觀模式提供入口。三層架構就是這樣的

二、優點

1、減少了系統間的相互依賴

2、提高了靈活性,簡化了介面,使用更加方便了

三、缺點

1、不符合開閉原則,如果要修改較為麻煩

總結

  到這裡外觀模式就介紹完了,外觀模式為一個或者多個子系統提供一個統一的介面,該模式定義了一個高層,使得使用子系統更加方便容易。並且外觀模式可以解決層次分離結構,降低客戶端與子系統之間的耦合。對於外觀模式側重點是整個系統的一種架構設計,與之相比我們可以看看結構型的四種設計模式。介面卡模式——注重介面轉換,達到適配使用。橋接模式——注重分離現象與實現,並聯合。裝飾模式——注重動態的增加職責功能。組合模式——注重部分—整體,對物件進行擴充套件。

  人都有以第一印象定好壞的習慣,認為一個人好時,就會愛屋及烏,認為一個人不好時,就會全盤否認。

    C#設計模式系列目錄

歡迎大家掃描下方二維碼,和我一起踏上設計模式的闖關之路吧!