C#設計模式——簡單工廠模式
阿新 • • 發佈:2017-07-01
turn static 現在 rri 介紹 return 天都 土豆 增加
一、引言
這個系列也是自己對設計模式的一些學習筆記,希望對一些初學設計模式的人有所幫助的,在上一個專題中介紹了單例模式,在這個專題中繼續為大家介紹一個比較容易理解的模式——簡單工廠模式。
二、簡單工廠模式的介紹
說到簡單工廠,自然的第一個疑問當然就是什麽是簡單工廠模式了?所有面向對象的編程都是在我們生活中存在的,從詞義的解釋就是我們生活中的工廠就是負責生產產品的,而到開發中對應的就是NEW不同的對象,該模式主要解決的問題就是解決創建對象與該類的解耦。設計原則中經常說的類單一職責、封裝性都有體現。
下面就用現實的中例子來說明該問題,我們大家每天都會去飯店吃飯,每個客戶去飯店吃飯,點的菜都會不一樣,客戶A可能會吃西紅柿燒雞蛋、客戶B可能會吃尖椒炒雞蛋、客戶C可能會吃炒土豆絲,以上場景,我們可能編碼如下:
public class CustomerA { /// <summary> /// 燒菜方法 /// </summary> /// <param name="type"></param> /// <returns></returns> public static Food Cook(string type) { Food food = null; // 客戶A說:我想吃西紅柿炒蛋怎麽辦? // 客戶B說:我想吃尖椒炒雞蛋怎麽辦? // 客戶C說: 炒土豆絲 if (type.Equals("西紅柿炒蛋")) { food = new ScrambledEggTomato(); } if (type.Equals("尖椒炒雞蛋")) { food = new PepperFriedEgg(); } else if (type.Equals("炒土豆絲")) { food = new FriedPotatoShreds(); } return food; } }
/// <summary> /// 菜的抽象對象 /// </summary> public abstract class Food { // 輸出點了什麽菜 public abstract void Print(); } /// <summary> /// 炒土豆絲 /// </summary> public class FriedPotatoShreds : Food { public override void Print() { Console.WriteLine("炒土豆絲"); } } /// <summary> /// 尖椒炒雞蛋 /// </summary> public class PepperFriedEgg : Food { public override void Print() { Console.WriteLine("尖椒炒雞蛋!"); } } /// <summary> /// 西紅柿炒雞蛋 /// </summary> public class ScrambledEggTomato : Food { public override void Print() { Console.WriteLine("一份西紅柿炒蛋!"); } } static void Main(string[] args) { // 做西紅柿炒蛋 Food food1 = CustomerA.Cook("西紅柿炒蛋"); food1.Print(); Food food2 = CustomerA.Cook("炒土豆絲"); food2.Print(); Console.Read(); }
從以上代碼可以看出CustomerA類和對應的菜品類耦合度非常高,如果再增加某菜品,還需要修改對應的CustomerA類,如果有多個地方有類似的代碼需要同時修改,造成代碼的重復,我們一直在說代碼的單一職責,CustomerA類本身是客戶點菜類,現在跟創建不同的菜品耦合起來了,再次簡單工廠模式正式解決了以上問題,代碼如下:
C#設計模式——簡單工廠模式