常用的軟體設計模式(二)簡單工廠模式
阿新 • • 發佈:2018-11-08
剛參加工作的時候,絲毫沒有面向物件的思想,所有分支都使用一堆的if...else...,現在回頭看以前的程式碼,著實low。但是隻要一心想著進步的人,一定是會總結和反省的,為什麼以前的程式碼出現bug這麼難維護,功能擴充套件那麼難,程式碼難得到複用,過了段時間連自己寫的程式碼都不知道什麼意思。都說女孩子邏輯思維比不上男孩子,工作幾年並沒這種感覺,區別在於總結和分析罷了,只要比別人多一點耐心,多一點總結,一年之後就會發現那些和你同一起點的人已經遠遠被你甩在後面,不廢話了,今天大豬蹄:簡單工廠模式,告別眼花繚亂的if...else。
簡單工廠模式:顧名思義,最少有一個生產產品的機器存在的工廠,有了這個工廠,當你需要某一物件時,傳入一個正確的引數,就可以獲取你所需要的物件,而無需知道其建立細節
優點:把分支封裝在工廠類裡,讓工廠類判斷使用者需要什麼物件,然後創建出什麼物件,不用把分支程式碼開發出來,模組清晰化,各個部分各司其職
缺點:依然需要在工廠類的新增分支語句只是把if...else...改成了switch...case...,在新增新的產品時,既需要新增新的產品類,也需要修改工廠類的程式碼,這裡就顯得耦合性較高,不過這個問題也是有辦法解決的,這個留到後面章節再講
寫一個特別簡單的例子,客戶需要根據名字獲取不同型別的水果,如果是剛畢業的我,一定會寫成下面這樣:
static void Main(string[] args) { Console.Write("請輸入水果名稱:"); string fruitName = Console.ReadLine; switch (fruitName) { case "Apple"://蘋果 Console.Write("你要的蘋果\t"); break; case "Banana": //香蕉 Console.Write("你要的香蕉\t"); break; default: Console.Write("這裡沒有你要的水果\t"); break; } }
簡單工廠模式設計如下,包含以下幾個類,使用者類、工廠類、抽象產品類、具體產品類
//抽象產品類 public class FruitType { public virtual void ShowFruit(); } //蘋果類 Class Apple:FruitType { public override void ShowFruit() { Console.Write("你要的蘋果\n\t"); } } //香蕉類 Class Banana:FruitType { public override void ShowFruit() { Console.Write("你要的香蕉\n\t"); } } //工廠類 public class FruitFactory { public static FruitType CreateFruit(string fruit) { FruitType fruitType = null; switch(fruitType) { case "apple": fruitType = new Apple(); break; case "banana": fruitType = new Banana(); break; } return fruitType; } } //客戶類 Class Client { FruitType fruitType; fruitType = FruitFactory.CreateFruit("apple"); fruitType.ShowFruit(); }