### 外觀式定義 為子系統中的一組介面提供一個一致的界面,Facade 模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。 #### 界面 在這裡提到的界面,主要指的是從一個組件外部來看這個組件,能夠看到什麼,這就是這個組件的界面,也就是所說的外觀。 #### 介面 在這裡提到的介面,主 ...
外觀式定義
為子系統中的一組介面提供一個一致的界面,Facade 模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
界面
在這裡提到的界面,主要指的是從一個組件外部來看這個組件,能夠看到什麼,這就是這個組件的界面,也就是所說的外觀。
介面
在這裡提到的介面,主要指的是外部和內部交互的這麼一個通道,通常是指一些方法,可以是類的方法,也可以是 interface 的方法。也就是說,這裡所說的介面,並不等價於 interface,也有可能是一個類。
外觀模式的結構和說明
Facade
定義子系統的多個模塊對外的高層介面,通常需要調用內部多個模塊,從而把客戶的請求代理給適當的子系統對象。
模塊
接受 Facade 對象的委派,真正實現功能,各個模塊之間可能有交互。
但是請註意,Facade 對象知道各個模塊,但是各個模塊不應該知道 Facade 對象。
代碼示例
using System;
namespace NetCore3Console.Facade
{
/// <summary>
/// A模塊的介面
/// </summary>
public interface AModuleApi
{
/// <summary>
/// 示意方法,A模塊 對外的一個功能方法
/// </summary>
void TextA();
}
public class AModuleImpl : AModuleApi
{
public void TextA()
{
Console.WriteLine("現在在A模塊裡面操作testA方法");
}
}
/// <summary>
/// B模塊的介面
/// </summary>
public interface BModuleApi
{
/// <summary>
/// 示意方法,A模塊 對外的一個功能方法
/// </summary>
void TextB();
}
public class BModuleImpl : BModuleApi
{
public void TextB()
{
Console.WriteLine("現在在B模塊裡面操作testB方法");
}
}
/// <summary>
/// C模塊的介面
/// </summary>
public interface CModuleApi
{
/// <summary>
/// 示意方法,A模塊 對外的一個功能方法
/// </summary>
void TextC();
}
public class CModuleImpl : CModuleApi
{
public void TextC()
{
Console.WriteLine("現在在B模塊裡面操作testC方法");
}
}
/// <summary>
/// 外觀對象
/// </summary>
public class Facade
{
/// <summary>
/// 示意方法,滿足客戶需要的功能
/// </summary>
public void Test()
{
//在內部實現的時候,可能會調用到內部的多個模塊
AModuleApi a = new AModuleImpl();
a.TextA();
BModuleApi b = new BModuleImpl();
b.TextB();
CModuleApi c = new CModuleImpl();
c.TextC();
}
}
}
模式講解
外觀模式的目的
外觀模式的目的不是給子系統添加新的功能介面,而是為了讓外部減少與子系統內多個模塊的交瓦,鬆散耦合,從而讓外部能夠更簡單地使用子系統。
外觀模式的實現
Facade的實現
對於一個子系統而言,外觀類不需要很多,通常可以實現成為一個單例。也可以直接把外觀中的方法實現成為靜態的方法,這樣就可以不需要創建外觀對象的實例而直接調用,這種實現相當於把外觀類當成一個輔助工具類實現。
Facade的方法實現
Facade的方法實現中,一般是負責把客戶端的請求轉發給子系統內部的各個模塊進行處理,Facade 的方法本身並不進行功能的處理,Facade 的方法實現只是實現一個功能的組合調用。
思考外觀模式
外觀模式的本質
外觀模式的本質是:封裝交互,簡化調用。
Facade 封裝了子系統外部和子系統內部多個模塊的交互過程,從而簡化了外部的調用。通過外觀,子系統為外部提供一些高層的介面,以方便它們的使用。
對設計原則的體現
外觀模式很好地體現了“最少知識原則”。
外觀模式就是新添加了個Facede類,在這裡面組合調用其他方法呀。