使用者案例 | 騰訊小視訊&轉碼平臺雲原生容器化之路
阿新 • • 發佈:2021-11-19
概述
為子系統中的一組介面提供一個一致的介面,此模式定義了一個高層介面,為這個介面使用
外觀模式也可以叫為門面模式,應用場景也比較明確,主要在介面設計方面使用
結構圖
程式碼實現
子系統
/// <summary> /// 子系統一 /// </summary> public class SubSystemOne { public void MethodOne() { Console.WriteLine(" 子系統方法一"); } }
/// <summary>/// 子系統二 /// </summary> public class SubSystemTwo { public void MethodTwo() { Console.WriteLine(" 子系統方法二"); } }
/// <summary> /// 子系統三 /// </summary> class SubSystemThree { public void MethodThree() { Console.WriteLine(" 子系統方法三"); } }
/// <summary> /// 子系統四 /// </summary> public class SubSystemFour { public void MethodFour() { Console.WriteLine(" 子系統方法四"); } }
外觀類
/// <summary> /// 外觀類 /// </summary> public class Facade { SubSystemOne one; SubSystemTwo two; SubSystemThree three; SubSystemFour four;public Facade() { one = new SubSystemOne(); two = new SubSystemTwo(); three = new SubSystemThree(); four = new SubSystemFour(); } public void MethodA() { Console.WriteLine("\n方法組A() ---- "); one.MethodOne(); two.MethodTwo(); four.MethodFour(); } public void MethodB() { Console.WriteLine("\n方法組B() ---- "); two.MethodTwo(); three.MethodThree(); } }
客戶端
class Program { static void Main(string[] args) { Facade facade = new Facade(); facade.MethodA(); facade.MethodB(); Console.Read(); } }
執行結果
優勢
符合迪米特法則(最少知識原則)
隱藏系統的複雜性,提供精簡的訪問方法,讓高層模組可以更加容易地間接呼叫這些子系統的功能。
減少系統相互依賴
提高靈活性
提高了安全性
降低了大型軟體系統中的編譯依賴性,簡化了系統在不同平臺之間的移植過程
使用場景
階段各種第三方SDK、開源類庫的使用
為複雜的模組或子系統提供外界訪問的模組。
子系統相對獨立。
預防低水平人員帶來的風險。
解決易用性問題
通過將多個介面呼叫替換為一個門面介面呼叫,減少網路通訊成本,提高 客戶端的響應速度
解決分散式事務問題。讓兩個不同的介面達到事務執行要引入很多機制非常複雜,要是再用一個介面包裹這來兩個介面來做處理就會比較簡單
缺陷
不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。