設計模式(十):外觀模式

K戰神發表於2016-01-13

一、定義

為子系統中的一組介面提供一個一致的介面,用來訪問子系統中的一群介面。

外觀模式的實現核心主要是——由外觀類去儲存各個子系統的引用,實現由一個統一的外觀類去包裝多個子系統類,然而客戶端只需要引用這個外觀類,然後由外觀類來呼叫各個子系統中的方法

二、例項

我們有兩個子系統

 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. 外觀模式對客戶遮蔽了子系統元件,從而簡化了介面,減少了客戶處理的物件數目並使子系統的使用更加簡單。
  2. 外觀模式實現了子系統與客戶之間的鬆耦合關係,而子系統內部的功能元件是緊耦合的。鬆耦合使得子系統的元件變化不會影響到它的客戶。

缺:

  1、如果增加新的子系統可能需要修改外觀類或客戶端的原始碼,這樣就違背了”開——閉原則“(哪能那麼完美,這點不可避免)。

 

相關文章