參考 大話設計模式
定義:為子系統中的一組介面提供一個一致的介面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
使用時機:
1.系統設計初期階段,三層式架構中層與層之間建立 Facade
2.開發階段,子系統的不斷演化,會產生許多的小類別,造成用戶程式調用難度,此時可以加入 Facade ,建立簡單的介面,減少依賴
3.在維護一個遺留的大型系統時,也許是個棕地,已經非常難以維護和擴展了,但又不能棄之不理,因為還有點賺頭 XD ;
用 Facade 將難用的舊系統大包,提供比較清晰簡單的介面,讓新系統與 Facade 互動,Facade 與舊系統的程式碼溝通。
結構圖:來源
說明:
Facade:外觀類別,知道哪些子系統負責處理請求,將客戶的請求代理給適當的子系統物件
SubSystem:處理 Facade 物件指派的任務
程式碼:
class Program
{
static void Main(string[] args)
{
Facade facade = new Facade();
facade.MethodA();
facade.MethodB();
Console.Read();
}
}
/// <summary>
/// 子系統類別一。
/// </summary>
class SubSystemOne
{
public void MethodOne()
{
Console.WriteLine(" 子系統方法一");
}
}
/// <summary>
/// 子系統類別二。
/// </summary>
class SubSystemTwo
{
public void MethodTwo()
{
Console.WriteLine(" 子系統方法二");
}
}
/// <summary>
/// 子系統類別三。
/// </summary>
class SubSystemThree
{
public void MethodThree()
{
Console.WriteLine(" 子系統方法三");
}
}
/// <summary>
/// 子系統類別四。
/// </summary>
class SubSystemFour
{
public void MethodFour()
{
Console.WriteLine(" 子系統方法四");
}
}
/// <summary>
/// 外觀類別。
/// </summary>
class Facade
{
//宣告子系統變數
SubSystemOne one;
SubSystemTwo two;
SubSystemThree three;
SubSystemFour four;
/// <summary>
/// 建構函式。
/// </summary>
public Facade()
{
one = new SubSystemOne();
two = new SubSystemTwo();
three = new SubSystemThree();
four = new SubSystemFour();
}
/// <summary>
/// 開放對外 methodA。
/// </summary>
public void MethodA()
{
Console.WriteLine("\n方法組A() ---- ");
one.MethodOne();
two.MethodTwo();
four.MethodFour();
}
/// <summary>
/// 開放對外 methodB。
/// </summary>
public void MethodB()
{
Console.WriteLine("\n方法組B() ---- ");
two.MethodTwo();
three.MethodThree();
}
}Design Pattern: Facade 模式
Facade
wiki Facade pattern
設計模式之Facade(外觀) 板橋里人
0 Comments:
張貼留言