為子系統中的一組介面提供一致介面,定義高層介面使子系統更易使用。
建立訂單需串接三個外部系統:
直接耦合三系統 → 網站因外部介面異動頻繁修改,且工具方法不友善。Facade 封裝高層介面,屏蔽子系統調用細節。
using System;
using System.Collections.Generic;
using System.Text;
namespace FacadeExample
{
class Program
{
static void Main(string[] args)
{
PayFacade pf = new PayFacade();
Console.WriteLine("order:" + pf.CreateOrder("yzhu", 0, 1, 12) + " created");
}
}
class PayFacade // Facade
{
private AccountSystem _account = new AccountSystem();
private CardSystem _card = new CardSystem();
private PaySystem _pay = new PaySystem();
public string CreateOrder(string userName, int cardID, int cardCount, int areaID)
{
int userID = _account.GetUserIDByUserName(userName);
if (userID == 0) return string.Empty;
if (!_account.UserIsActived(userID, areaID)) return string.Empty;
if (!_card.CardHasStock(cardID, cardCount)) return string.Empty;
return _pay.CreateOrder(userID, cardID, cardCount);
}
}
class AccountSystem // 子系統
{
public bool UserIsActived(int userID, int areaID) => true;
public int GetUserIDByUserName(string userName) => 123;
}
class CardSystem { public bool CardHasStock(int cardID, int cardCount) => true; }
class PaySystem { public string CreateOrder(int userID, int cardID, int cardCount) => "0000000001"; }
}
CreateOrder,無需知曉三系統交互順序與失敗處理