Façade pattern 在 C# 上的實作
根據 ChatGPT 的回答,Façade pattern 的定義如下:
Façade pattern 是一種結構型設計模式,它提供了一個簡單的介面,將複雜的子系統組合起來,以簡化客戶端對系統的使用。
也就是說,對使用者而言,他們只是單純的呼叫一個函式,至於背後怎麼運作並不清楚也不需要知道,以下是簡單的程式碼範例:
public interface IPayment
{
public void Pay();
}
public interface IMessage
{
public void SendMessage();
}
public class GooglePay : IPayment
{
public void Pay()
{
Console.WriteLine("use Google Pay.");
}
}
public class LINEPay : IPayment
{
public void Pay()
{
Console.WriteLine("use LINE Pay.");
}
}
public class Email:IMessage
{
public void SendMessage()
{
Console.WriteLine("use email.");
}
}
public class PhoneMessage : IMessage
{
public void SendMessage()
{
Console.WriteLine("use mobile phone message.");
}
}
上面的程式碼,定義了兩個 interface,分別代表支付及傳送訊息兩個功能,也定義了實作這兩個 interface 的類別,接下來是 Façade 相關的程式碼:
public class FacadeDemoClass
{
private IPayment _payment;
private IMessage _message;
public FacadeDemoClass()
{
string paymentType = "FacadePatternConsoleAP.GooglePay";
string messageType = "FacadePatternConsoleAP.PhoneMessage";
_payment = Activator.CreateInstance(Type.GetType(paymentType)) as IPayment;
_message = Activator.CreateInstance(Type.GetType(messageType)) as IMessage;
}
public void PayAPI()
{
_payment.Pay();
}
public void SendMessageAPI()
{
_message.SendMessage();
}
}
在建構子中指定了實際要使用的類別是什麼,當然在實際的案例中,應該要透過設定檔或其它的方式來指定,而在使用時的方式如下:
FacadeDemoClass facadeDemoClass = new FacadeDemoClass();
facadeDemoClass.PayAPI();
facadeDemoClass.SendMessageAPI();
就只有單純的呼叫,裡面實際運作並不曉得,當然這兩個函式並沒有定義參數,實際上也沒那麼簡單,但這裡要表達的是,利用 Façade pattern,可以有效隱藏複雜的程式碼,讓其它的工程師專心在其它的程式邏輯上。
參考資料