抽象工廠模式-約會吃雞翅薯條讓麥當勞肯德基去做吧


抽象工廠模式比喻

追女孩子少不了請吃飯,麥當勞的雞翅、薯條和肯德基的雞翅、薯條都是女孩子愛吃的東西,雖然口味有所不同,但不管你帶女生去麥當勞或肯德基,只管向服務員說“來兩個雞翅兩包薯條”就行了。麥當勞和肯德基就是生產雞翅、薯條的 Factory,這個過程就是抽象工廠模式。
 
抽象工廠模式意圖
抽象工廠模式 (Abstract Factory) ,提供一個創建一系列相關或相互依賴的接口,而無需指定它們具體的類。

抽象工廠模式類圖

 www.zhuli8.com-朱利IT博客

抽象工廠模式實現

    /// <summary>
    /// 抽象工廠接口-快餐店,它里面應該可以做雞翅和薯條
    /// </summary>
    interface IQuikMeal
    {
        IWing CreateWing();
        IChips CreateChips();
    }

    /// <summary>
    /// 具體工廠-肯德基,做自己配方的雞翅、薯條
    /// </summary>
    class KFC:IQuikMeal
    {
        public IWing CreateWing()
        {
            return new KFC_Wing();
        }

        public IChips CreateChips()
        {
            return new KFC_Chips();
        }
    }

    /// <summary>
    /// 具體工廠-麥當勞,做自己配方的雞翅、薯條
    /// </summary>
    class MCD : IQuikMeal
    {

        public IWing CreateWing()
        {
            return new MCD_Wing();
        }

        public IChips CreateChips()
        {
            return new MCD_Chips();
        }
    }

    /// <summary>
    /// 抽象產品-雞翅,它有肯德基和麥當勞兩家快餐店生產
    /// </summary>
    interface IWing
    {
        string GetWing();
    }

    /// <summary>
    /// 肯德基做出來的雞翅
    /// </summary>
    class KFC_Wing : IWing
    {

        public string GetWing()
        {
            return "KFC's Wing!";
        }
    }

    /// <summary>
    /// 麥當勞做出來的雞翅
    /// </summary>
    class MCD_Wing : IWing
    {
        public string GetWing()
        {
            return "MCD's Wing!";
        }
    }

    /// <summary>
    /// 抽象產品-薯條,它有兩家快餐店生產
    /// </summary>
    interface IChips
    {
        string GetChips();
    }

    /// <summary>
    /// 肯德基做出來的薯條
    /// </summary>
    class KFC_Chips : IChips
    {
        public string GetChips()
        {
            return "KFC's Chips!";
        }
    }

    /// <summary>
    /// 麥當勞做出來的薯條
    /// </summary>
    class MCD_Chips : IChips
    {
        public string GetChips()
        {
            return "MCD's Chips!";
        }
    }

    /// <summary>
    /// 客戶端應用
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            //MM選擇肯德基,如果選擇麥當勞,只需將KFC換成MCD即可
            IQuikMeal meal = new KFC();

            //我要吃雞翅
            Console.WriteLine(meal.CreateWing().GetWing());

            //我要吃薯條
            Console.WriteLine(meal.CreateChips().GetChips());

            Console.Read();
        }
    }

抽象工廠模式總結

抽象工廠最大的好處就是約會時可以很方便的選擇某一家快餐店,並且快餐店的生產流程和我們客戶之間沒有關系,但是如果女生想喝飲料或者想選擇必勝客那就麻煩了,但是一樣可以擴展。

朱利IT博客原創博文:文章地址:http://www.zhuli8.com/sjms/factory.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM