為子系統一組介面提供一致界面,定義高層介面使子系統更易用。
遊戲充值網站建單需對接三外部系統:
直接耦合三系統導致網站因介面變更頻繁修改,且工具式介面不友善。Facade 封裝高層介面,屏蔽子系統調用細節。
using System;
using System.Collections.Generic;
using System.Text;
namespace FacadeExample
{
class Program
{
static void Main(string[] args)
{
PayFacacde pf = new PayFacacde();
Console.WriteLine($"order:{pf.CreateOrder("yzhu", 0, 1, 12)} created");
}
}
class PayFacacde
{
AccountSystem account = new AccountSystem();
CardSystem card = new CardSystem();
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"; }
}