一、定義
為子系統中的一組介面提供一個一致的介面,用來訪問子系統中的一群介面。
外觀模式的實現核心主要是——由外觀類去儲存各個子系統的引用,實現由一個統一的外觀類去包裝多個子系統類,然而客戶端只需要引用這個外觀類,然後由外觀類來呼叫各個子系統中的方法
二、例項
我們有兩個子系統
public class SubSystem_A { public void A() { Console.WriteLine("執行子系統SubSystem_A的A方法."); } } public class SubSystem_B { public void B() { Console.WriteLine("執行子系統SubSystem_B的B方法."); } }
以往在客戶端呼叫A系統和B系統需要各自例項化後,進行呼叫。然,客戶端和子系統的耦合加劇,所以我們使用外觀來解決這一問題。
外觀模式,就是外觀者維護子系統的引用並對子系統中的方法進行整理公開,供客戶端統一呼叫
外觀:
public class Facade { public SubSystem_A subA; public SubSystem_B subB; public Facade() { subA = new SubSystem_A(); subB = new SubSystem_B(); } public void Do_A() { subA.A(); } public void Do_B() { subB.B(); } }
圖例:
客戶端:
//-----------------------外觀模式------------------ Facade.Facade facade = new Facade.Facade(); facade.Do_A(); facade.Do_B(); Console.ReadKey();
三、優缺點
優:
- 外觀模式對客戶遮蔽了子系統元件,從而簡化了介面,減少了客戶處理的物件數目並使子系統的使用更加簡單。
- 外觀模式實現了子系統與客戶之間的鬆耦合關係,而子系統內部的功能元件是緊耦合的。鬆耦合使得子系統的元件變化不會影響到它的客戶。
缺:
1、如果增加新的子系統可能需要修改外觀類或客戶端的原始碼,這樣就違背了”開——閉原則“(哪能那麼完美,這點不可避免)。