根據 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,可以有效隱藏複雜的程式碼,讓其它的工程師專心在其它的程式邏輯上。

參考資料