首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 設計模式無廢話系列(八):Facade 外觀模式

     編輯:關於C#

意圖

為子系統一組介面提供一致界面,定義高層介面使子系統更易用。

適用場景

遊戲充值網站建單需對接三外部系統:

  • 用戶系統:獲取用戶 ID、檢查激活狀態
  • 卡系統:檢查充值卡庫存
  • 充值系統:建單、回傳單號

直接耦合三系統導致網站因介面變更頻繁修改,且工具式介面不友善。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"; }
}

程式碼解析

  • PayFacade:外觀類,客戶端調用入口,內部協調子系統。建單流程:用戶名→用戶ID→檢查激活→檢查卡庫存→建單。
  • AccountSystem/CardSystem/PaySystem:子系統,提供細粒度工具方法。
  • Facade 極常用:將多方關聯邏輯再封裝一次,提供高層介面。論壇程式中權限模組與數據模組調用判斷,加業務邏輯層統一入口即為 Facade。

何時採用

  • 代碼角度:多個類與一組介面關聯 → 加外觀類。
  • 應用角度:子系統介面極細、調用方有大量邏輯關聯 → Facade 化解直接耦合。子系統改外觀仍需改,但若客戶端複雜或多處調用外觀,優勢明顯。

實作要點

  • 高層介面隔離子系統與客戶端,使客戶端不受子系統變化影響。
  • Facade 不限代碼層,架構層(特別是 Web 應用)應用極普遍。

注意事項

  • Facade 非只能有一個,可細分多個外觀類。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved