C++ 設計模式—外觀模式

外觀模式:爲子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

 

外觀模式(Facede)結構圖:

 

 

 

四個子系統的類:

 

class SubSystemOne

{

 public:

    void  MethodOne()

    {

          cout<< “子系統方法一”<<endl;

    }

};

 

 

class SubSystemTwo

{

 public:

void  MethodTwo()

{

           cout<< “子系統方法二”<<endl;

   }

};

 

 

class SubSystemThree

{

 public:

    void  MethodThree()

    {

          cout<< “子系統方法三”<<endl;

    }

};

 

 

class SubSystemFour

{

 public:

    void  MethodFour

    {

          cout<< “子系統方法四”<<endl;

    }

};

 

 

外觀類:

 

class Façade

{

 private:

    SubSystemOne  one;

    SubSystemTwo  two;

    SubSystemThree three;

    SubSystemFour  four;

 public:

     Façade()

     {

           one = new SubSystemOne();

           two = new SubSystemTwo();

           three = new SubSystemThree();

           four= new SubSystemFour();

     }

     void  MethodA()

      {

                 cout<< “方法組A”<<endl;

                 one.MethodOne();

                 two.MethodTwo();

                 fout.MethodFour();

           }

          void  MethodB()

          {

                 cout<< “方法組B”<<endl;

                 two.MethodTwo();

                 three.MethodThree();

          }       

};

 

客戶端調用:

 

int main()

{

       Façade  façade = new Façade();

       façade.MethodA();

       façade.MethodB();

}

 

 

對於面向對象有一定基礎的朋友,即使沒有聽說過外觀模式,也完全有可能在很多時候使用過它,因爲它完美地體現了依賴倒轉原則和迪米特法則的思想,所以是非常常用的模式之一。

 

 

何時使用外觀模式?

 

這要分三個階段來說,首先,在設計初期階段,應該要有意識的將不同的兩個層分離,比如經典的三層架構,就需要考慮在數據訪問層和業務邏輯層、業務邏輯層和表現層的層與層之間建立外觀模式Façade,就這樣可以爲複雜的子系統提供一個簡單的接口,使得耦合大大降低。其次,在開發階段,子系統往往因爲不斷的重構演化而變得越來越複雜,大多數的模式使用時也都會產生很多的小的類,這本是好事,但也給外部調用它們的用戶程序帶來了使用上的困難,增加外觀Façade可以提供一個簡單的接口,減少它們之間的依賴。第三,在維護一個遺留的大型系統時,可能這個系統已經非常難以維護和擴展了,但因爲它包含非常重要的功能,新的需求開發必須要依賴於它。此時用外觀模式Façade也是非常適合的。你可以爲新系統開發一個外觀Façade類,來提供設計粗糙或高度複雜的遺留代碼的比較清晰簡單的接口,讓新系統與Façade對象交互,Façade與遺留代碼交互所有複雜的工作。


 

發佈了96 篇原創文章 · 獲贊 4 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章