動機:組件包含多個複雜的子系統,其客戶直接依賴該組件子系統,隨著客戶程式和各子系統的演化,這種過多的耦合面臨著變化的挑戰。本模式為子系統中的一組介面提供一個一致的介面,定義了一個高層介面,這個介面使得這一子系統更加容易使用。
情境:ThinkPad由多個複雜的子系統組成:主板、CPU、電源等。這些子系統協同工作,提供給客戶具有統一操作介面的ThinkPad。
結構
代碼實現
namespace DesignPattern.Facade
{
internal class Mainboard
{
public void Start()
{
}
public void Operate()
{
}
public void Shutdown()
{
}
}
internal class CPU
{
public void Start()
{
}
public void Operate()
{
}
public void Shutdown()
{
}
}
internal class Power
{
public void Start()
{
}
public void Operate()
{
}
public void Shutdown()
{
}
}
}
/**//*
* Facade統一介面
*/
namespace DesignPattern.Facade
{
public class ThinkPadFacade
{
Mainboard mainboard = new Mainboard();
CPU cpu1 = new CPU();
CPU cpu2 = new CPU();
Power power = new Power();
public void Start()
{
power.Start();
mainboard.Start();
cpu1.Start();
cpu2.Start();
}
public void Operate()
{
cpu1.Operate();
cpu2.Operate();
}
public void Shutdown()
{
cpu1.Shutdown();
cpu2.Shutdown();
mainboard.Shutdown();
power.Shutdown();
}
}
}
要點:
1、從客戶程式的角度看,本模式不僅簡化了整個組件系統的介面,同時對於組件內部與外部客戶程式來說,從某種程度上也達到了一種“解耦”的效果——內部子系統的變化不會影響到Facade介面的變化
2、本設計模式更注重從架構的層次去看整個系統,而不是單個類的層次。本模式很多時候更是一種架構設計模式。
3、與其他結構型模式的區別:Facade模式注重簡化介面,Adapter模式注重轉換介面,Bridge模式注重分離介面(抽象)與其實現,Decorator模式注重穩定介面的前提下為對象擴充功能。