外觀式定義
為子系統中的一組介面提供一個一致的界面,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類,在這里面組合呼叫其他方法呀,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/554003.html
標籤:設計模式
上一篇:解釋器模式(Interpreter Pattern)
下一篇:返回列表
