前言
今天一起來看看外觀模式,外觀模式也是我們介紹的結構型設計模式的第五個模式了。外觀外表,有句話是這么說的人靠衣裝 佛靠金裝。打扮的好,整理的好。外觀靠上去整整齊齊,精氣神一下就上來了。在開發中依然如此。客戶端完成一個功能,可能需要調用許多的接口來配合。按照開發邏輯一個一個依次對接下來。客戶端代碼復雜,看上去一團糟。不說其他的,就表面上看起來就不怎么好吧。那么不如我們把調用的接口進行再次的封裝。統一規范。這樣整理下來。客戶端就明了多了。
外觀模式介紹
一、來由
在軟件系統開發中,我們經常會遇到客戶端與內部子系統進行負責耦合的情況。從而導致客戶端隨着子系統的變化而變化。為了解決客戶端與子系統直接的高耦合,並且簡化接口的調用。也就有了外觀模式。
二、意圖
為子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
三、案例圖
四、外觀模式代碼示例
看上面我們發現外觀模式包含以下角色:
外觀角色:在客戶端調用外觀角色的方法,其中與一個或多個子系統相關聯。在運行情況下,客戶端請求傳遞到外觀角色然后傳遞給對應的子系統。
子系統:在軟件系統中包含一個或者多個子系統,子系統可以單獨被客戶端調用,子系統不知道外觀角色的存在。相對而言,也可以當外觀角色為客戶端。
我們看這么一個案例,通過案例我們來詳細了解外觀模式到底是怎么一回事以及如何運行的。例如我們現在有的軟件系統。新用戶在輸入手機號填入驗證碼就登錄注冊都搞定了。同時還附加了一些第一次登錄注冊的獎勵。如果不按外觀模式來的話,我們在登錄按鈕后面的客戶端依次調用了注冊、登錄、贈送獎勵等等方法。那么我們看看外觀模式如何解決呢:
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、不符合開閉原則,如果要修改較為麻煩
總結
到這里外觀模式就介紹完了,外觀模式為一個或者多個子系統提供一個統一的接口,該模式定義了一個高層,使得使用子系統更加方便容易。並且外觀模式可以解決層次分離結構,降低客戶端與子系統之間的耦合。對於外觀模式側重點是整個系統的一種架構設計,與之相比我們可以看看結構型的四種設計模式。適配器模式——注重接口轉換,達到適配使用。橋接模式——注重分離現象與實現,並聯合。裝飾模式——注重動態的增加職責功能。組合模式——注重部分—整體,對對象進行擴展。
人都有以第一印象定好壞的習慣,認為一個人好時,就會愛屋及烏,認為一個人不好時,就會全盤否認。
歡迎大家掃描下方二維碼,和我一起踏上設計模式的闖關之路吧!