為了系統中的一組介面提供一個一致的介面;定義了一個高層介面,使得子系統更加容易使用。
即對底層邏輯和介面進行一次整合封裝。以至於外部能更容易的使用。
結構圖:


程式碼:
//子系統的四個類
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();
使用時機:
設計初期將不同的層分離時在層與層之間建立外觀;
開發階段,使用外觀封裝子系統。
面對遺留的高複雜度或粗糙程式碼時,使用外觀封裝它。
優點:完美符合依賴倒轉、迪米特法則。外部無需了解子系統細節,只依賴外觀類;子系統也只需要對外觀類實現支援,實現了子系統和外部的松耦合。
缺點:增加新的子系統可能需要修改外觀類或客戶端,違背了「開閉原則」。

