程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 無廢話C#設計模式之八:Facade(1)

無廢話C#設計模式之八:Facade(1)

編輯:關於C語言

意圖

為子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

場景

在一個為游戲充值的網站中,創建訂單需要與三個外部接口打交道:

l 用戶系統:根據用戶名獲取用戶ID、查看用戶是否已經激活了游戲

l 卡系統:查看某種類型的充值卡是否還有庫存

l 充值系統:創建一個訂單,並且返回訂單號

如果直接讓網站和三個外部接口發生耦合,那麼網站因為外部系統接口修改而修改的概率就很大了,並且就這些小接口來說並不是十分友善,它們提供的大多數是工具方法,具體怎麼去使用還是要看充值網站創建訂單的邏輯。

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

    {

        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)

        {

            return true;

        }

        public int GetUserIDByUserName(string userName)

        {

            return 123;

        }

    }

    class CardSystem

    {

        public bool CardHasStock(int cardID, int cardCount)

        {

            return true;

        }

    }

    class PaySystem

    {

        public string CreateOrder(int userID, int cardID, int cardCount)

        {

            return "0000000001";

        }

    }

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved