首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 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)
        {
            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"; }
}

核心價值

  • Client 僅呼叫 CreateOrder,無需知曉三系統交互順序與失敗處理
  • 子系統異動僅影響 Facade 內部,Client 零修改
  • 將「工具方法組合邏輯」上移至 Facade,符合單一職責
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved