外觀模式

定義:

  為了系統中的一組介面提供一個一致的介面;定義了一個高層介面,使得子系統更加容易使用。

  即對底層邏輯和介面進行一次整合封裝。以至於外部能更容易的使用。

結構圖:

 

 程式碼:

//子系統的四個類

class SubSystemOne

{

  void MethodOne();

}

class SubSystemTwo

{

  void MethodTwo();

}

class SubSystemThree

{

  void MethodThree();

}

class SubSystemfour

{

  void MethodFour();

}

//外觀類,整合子系統,為外部提供更方便的統一介面

class Facade

{

  SubSystemOne One;

  SubSystemTwo Two;

  SubSystemThree Three;

  SubSystemfour Four;

  faceade()

  {

    One = new SubSystemOne();

    Two = new SubSystemTwo();

    Three = new SubSystemThree();

    Four = new SubSystemfour();

  }

  //供外部調用的整合介面A

  void MethodA()

  {

    One.MethodOne();

    Two.MethodTwo();

  }

  //供外部調用的整合介面B

  void MethodB()

  {

    One.MethodOne();

    Four.MethodFour();

  }

 

}

//客戶端

Facade cFacade = new Facade();

Facade.MethodA();//客戶端根本無需知道子系統細節,只依賴外觀類即可,完美符合依賴倒轉和迪米特法則

Facade.MethodB();

 

使用時機:

  設計初期將不同的層分離時在層與層之間建立外觀;

  開發階段,使用外觀封裝子系統。

  面對遺留的高複雜度或粗糙程式碼時,使用外觀封裝它。

 

優點:完美符合依賴倒轉、迪米特法則。外部無需了解子系統細節,只依賴外觀類;子系統也只需要對外觀類實現支援,實現了子系統和外部的松耦合。

缺點:增加新的子系統可能需要修改外觀類或客戶端,違背了「開閉原則」。