文章出處

/// <summary>
    /// 顧客充當客戶端,負責調用簡單工廠來生產對象
    /// 即客戶點菜,廚師(相當于簡單工廠)負責燒菜(生產的對象)
    /// </summary>
    class Customer
    {
        static void Main(string[] args)
        {
            // 客戶想點一個西紅柿炒蛋        
            Food food1 = FoodSimpleFactory.CreateFood("西紅柿炒蛋");
            food1.Print();

            // 客戶想點一個土豆肉絲
            Food food2 = FoodSimpleFactory.CreateFood("土豆肉絲");
            food2.Print();

            Console.Read();
        }
    }

    /// <summary>
    /// 菜抽象類
    /// </summary>
    public abstract class Food
    {
        // 輸出點了什么菜
        public abstract void Print();
    }

    /// <summary>
    /// 西紅柿炒雞蛋這道菜
    /// </summary>
    public class TomatoScrambledEggs : Food
    {
        public override void Print()
        {
            Console.WriteLine("一份西紅柿炒蛋!");
        }
    }

    /// <summary>
    /// 土豆肉絲這道菜
    /// </summary>
    public class ShreddedPorkWithPotatoes : Food
    {
        public override void Print()
        {
            Console.WriteLine("一份土豆肉絲");
        }
    }

    /// <summary>
    /// 簡單工廠類, 負責 炒菜
    /// </summary>
    public class FoodSimpleFactory
    {
        public static Food CreateFood(string type)
        {
            Food food = null;
            if (type.Equals("土豆肉絲"))
            {
                food= new ShreddedPorkWithPotatoes();
            }
            else if (type.Equals("西紅柿炒蛋"))
            {
                food= new TomatoScrambledEggs();
            }

            return food;
        }
    }

缺點: 簡單工廠模式系統難以擴展,一旦添加新產品就不得不修改簡單工廠方法,這樣就會造成簡單工廠的實現邏輯過于復雜

優點:

  • 簡單工廠模式解決了客戶端直接依賴于具體對象的問題,客戶端可以消除直接創建對象的責任,而僅僅是消費產品。簡單工廠模式實現了對責任的分割。
  • 簡單工廠模式也起到了代碼復用的作用,因為之前的實現(自己做飯的情況)中,換了一個人同樣要去在自己的類中實現做菜的方法,然后有了簡單工廠之后,去餐館吃飯的所有人都不用那么麻煩了,只需要負責消費就可以了。此時簡單工廠的燒菜方法就讓所有客戶共用了。(同時這點也是簡單工廠方法的缺點——因為工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都會受到影響,也沒什么不好理解的,就如事物都有兩面性一樣道理

簡單工廠的應用場景:

  • 當工廠類負責創建的對象比較少時可以考慮使用簡單工廠模式()
  • 客戶如果只知道傳入工廠類的參數,對于如何創建對象的邏輯不關心時可以考慮使用簡單工廠模式

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()