iT邦幫忙

2022 iThome 鐵人賽

DAY 6
1

今晚…我想來點…麥當勞

大家應該都有去麥當勞點餐過的經驗,如果今天我想來個二號餐(雙層牛肉吉士堡),不可能走進去跟做薯條的人說我要一份薯條,再去漢堡區說我要一份漢堡幫我製作,最後去飲料區說我要大杯零卡可樂吧(應該會被店員趕出來XD)。

我們所有人點餐的窗口都是向櫃檯的服務員點餐,透過服務員將所需要的餐點指派給負責的人去做,最後再將所有餐點交給我們,轉換成物件導向的設計模式,就稱之為『Facade』!

Facade - 定義

為子系統中的一組介面定義一個統一介面。Facade模式定義了一個更高層的介面,使子系統更加容易使用。

https://ithelp.ithome.com.tw/upload/images/20220917/20136443D2I66QQxAz.png
(圖片來源:https://images.cnblogs.com/cnblogs_com/terrylee/Facade02.jpg)

麥當勞UML

https://ithelp.ithome.com.tw/upload/images/20220917/20136443nChxMmEUSU.png

不囉嗦上Code!

class Program
    {
        static void Main(string[] args)
        {
            Clerk clerk = new Clerk();
            clerk.MakeOrder();
        }
    }

    class Clerk
    {
        private Hamburger_Dept hamburger_Dept = new Hamburger_Dept();
        private Fries_Dept fries_Dept = new Fries_Dept();
        private Nugget_Dept nugget_Dept = new Nugget_Dept();
        public void MakeOrder()
        {
            hamburger_Dept.MakeHamburger();
            fries_Dept.MakeFries();
            nugget_Dept.MakeNugget();
            Console.WriteLine("所有餐點製作完成");
        }
    }

    class Hamburger_Dept
    {
        public void MakeHamburger()
        {
            Console.WriteLine("漢堡製作完成");
        }
    }
    class Fries_Dept
    {
        public void MakeFries()
        {
            Console.WriteLine("薯條製作完成");
        }
    }
    class Nugget_Dept
    {
        public void MakeNugget()
        {
            Console.WriteLine("雞塊製作完成");
        }
    }

-結果
https://ithelp.ithome.com.tw/upload/images/20220917/20136443nSl0Ua3PSH.png

簡單的小結

Facade模式可以應用於以下幾種情況:

  • 希望封裝或者隱藏原系統。
  • 希望使用原系統的功能,而且希望增加一些新的功能。
  • 編寫新類別的成本小於所有人學會使用或者未來維護原系統上所需的成本。

上一篇
【DAY5】學設計模式,WHY?
下一篇
【DAY7】Adapter模式 - 外接螢幕的故事
系列文
勇闖秘境!探索物件導向背後的設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言