文章出處
文章列表
/// <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; } }
缺點: 簡單工廠模式系統難以擴展,一旦添加新產品就不得不修改簡單工廠方法,這樣就會造成簡單工廠的實現邏輯過于復雜
優點:
- 簡單工廠模式解決了客戶端直接依賴于具體對象的問題,客戶端可以消除直接創建對象的責任,而僅僅是消費產品。簡單工廠模式實現了對責任的分割。
- 簡單工廠模式也起到了代碼復用的作用,因為之前的實現(自己做飯的情況)中,換了一個人同樣要去在自己的類中實現做菜的方法,然后有了簡單工廠之后,去餐館吃飯的所有人都不用那么麻煩了,只需要負責消費就可以了。此時簡單工廠的燒菜方法就讓所有客戶共用了。(同時這點也是簡單工廠方法的缺點——因為工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都會受到影響,也沒什么不好理解的,就如事物都有兩面性一樣道理)
簡單工廠的應用場景:
- 當工廠類負責創建的對象比較少時可以考慮使用簡單工廠模式()
- 客戶如果只知道傳入工廠類的參數,對于如何創建對象的邏輯不關心時可以考慮使用簡單工廠模式
文章列表
全站熱搜