Design Pattern系列(一)-簡單工廠模式

今天開始陸續研究OOP的一些開發模式,而第一篇就是就從好幾次面試都被問到的Factory(簡單工廠模式)開始好了...

什麼是簡單工廠模式呢??
生活上的例子就是 => 去到飲料店(DrinkFactory)只需要跟店員講我要點什麼飲料(ex:Green、Coffee..等),我並不需要知道飲料的配方就可以得到一杯我要的飲料,這就是簡單工廠的模式 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory_Simple
{
    class Program
    {
        static void Main(string[] args)
        {          
            #region 簡單工廠

            Shop shop;
            shop = DrinkFactory.CreateDrink("Green");
            shop.MakeDrink();

            Console.WriteLine("===========完成訂單=============");

            shop = DrinkFactory.CreateDrink("Coffee");
            shop.MakeDrink();

            Console.WriteLine("===========完成訂單=============");
            #endregion

            Console.ReadLine();
        }
    }
}

 Class Shop.cs

namespace Factory_Simple
{
    public abstract class Shop
    {
        public abstract void MakeDrink();
    }
}

DrinkFactory.cs

using System;

namespace Factory_Simple
{
    public class DrinkFactory
    {
        public static Shop CreateDrink(string Drink)
        {
            Shop obj=null;
            switch (Drink)
            {
                case "Green":
                    obj = new Green();
                    break;
                case "Coffee":
                    obj = new Coffee();
                    break;              
            }
            return obj;
        }
    }

    public class Coffee : Shop
    {
        public Coffee()
        {
            Console.WriteLine("收到咖啡訂單");
        }
     
        public override void MakeDrink()
        {
            Console.WriteLine("開始製作咖啡");
        }
    }

    public class Green : Shop
    {
        public Green()
        {
            Console.WriteLine("收到綠茶訂單");
        }

        public override void MakeDrink()
        {
            Console.WriteLine("開始製作綠茶");
        }

    }
}

列出以下結果

但如果使用簡單工廠模式,缺點就是如果要新增飲料的種類,就需要修改到靜態方法(CreateDrink),
那就可以使用工廠模式(對靜態方法的修改是封閉的)

工廠模式就留到下一篇繼續囉~也希望各位前輩多多指教  我是會敬老尊賢的XXD(開玩笑的)
================================================================================================
過了好久才發了這篇,不過發現Disqus還真的是滿不錯的,還研究了一下 哈哈