工廠顧名思義就是生產商品的,造紙廠生產紙,鞋廠生產鞋,在面向對象的編程思想中,那麼我們這裡設計模式中的簡單工廠就是為我們生產對象的。 在介紹簡單工廠模式之前,我們先來瞭解一下怎麼生產一個商品,以生產筆記本為例,我們怎麼讓一個筆記本生產出來呢,最簡單的方式,就是我們通過實例化的方式,就能產生一個筆記本
工廠顧名思義就是生產商品的,造紙廠生產紙,鞋廠生產鞋,在面向對象的編程思想中,那麼我們這裡設計模式中的簡單工廠就是為我們生產對象的。
在介紹簡單工廠模式之前,我們先來瞭解一下怎麼生產一個商品,以生產筆記本為例,我們怎麼讓一個筆記本生產出來呢,最簡單的方式,就是我們通過實例化的方式,就能產生一個筆記本對象,生產出來的筆記本我們想讓它介紹一下自己,那麼我們就調用它的Introduce方法。
首先我們定義一個Leveno類,用於描述聯想筆記本,代碼如下:
namespace SimpleComputer.Computer { public class Leveno { public override void Introduce() { Console.WriteLine("我是聯想電腦"); } } }Leveno
在Main方法中實例化並調用它的Introduce方法,讓它介紹一下自己,代碼如下:
class Program { static void Main(string[] args) { Leveno com = new Leveno(); com.Introduce(); Console.ReadKey(); } }Main
一個簡單的產生筆記本的實例算是結束了,接下來我們來想這樣一個問題,假如說我們想生產一個Dell的筆記本電腦,那我們又該怎樣實現,加入我們採用客戶端輸入相應的品牌標識得到相應的對象的話,首先我們需要對Dell、Leveno提取一個父類,用於存儲生產的筆記本電腦,此父類中必須包含所有的Introduce虛方法,用於讓子類實現,具體父類及子類代碼如下:
namespace SimpleComputer.Computer { public class ComputerBase { public virtual void Introduce() { Console.WriteLine("我是一臺電腦"); } } }ComputerBase
namespace SimpleComputer.Computer { public class Leveno:ComputerBase { public override void Introduce() { Console.WriteLine("我是聯想電腦"); } } }Leveno
namespace SimpleComputer.Computer { public class Dell : ComputerBase { public override void Introduce() { Console.WriteLine("我是戴爾電腦"); } } }Dell
namespace SimpleComputer.Computer { public class Sony : ComputerBase { public override void Introduce() { Console.WriteLine("我是索尼電腦"); } } }Sony
所有的電腦父類,電腦子類都已經實現了,接下來要在Main方法中進行實現了,只需要在Main方法中調用就可以了,具體代碼的實現如下:
class Program { static void Main(string[] args) { Console.WriteLine("請輸入電腦的標誌"); string name = Console.ReadLine(); ComputerBase computer = null; switch (name) { case "Leveno": computer = new Leveno(); break; case "Dell": computer = new Dell(); break; case "Sony": computer = new Sony(); break; default: computer = new ComputerBase(); break; } computer.Introduce(); Console.ReadKey(); } }Main
根據封裝、單一職責的原則,一個類只能做一件事情,Main方法中生產不同的電腦,顯然違背了單一職責原則,代碼重構一下,把生產電腦的方法封裝在生產電腦類中作為它的方法,這個類叫做電腦工廠類,具體實現如下:
namespace SimpleComputer { public class ComputerFactory { public static ComputerBase CreateComputer(string name) { ComputerBase computer = null; switch (name) { case "Leveno": computer = new Leveno(); break; case "Dell": computer = new Dell(); break; case "Sony": computer = new Sony(); break; default: computer = new ComputerBase(); break; } return computer; } } }ComputerFactory
那我們現在的Main方法中就變得更加簡單了,具體代碼如下:
namespace SimpleComputer { class Program { static void Main(string[] args) { Console.WriteLine("請輸入電腦的標誌"); string name = Console.ReadLine(); ComputerBase computer = ComputerFactory.CreateComputer(name); computer.Introduce(); Console.ReadKey(); } } }Main
好了,一個簡單工廠的實例就算結束了,那麼讓我們看一下簡單工廠的UML圖:
以上就是簡單工廠的使用以及UML圖,其實簡單工廠就是生產一件商品之前進行的一次判斷,客戶想要什麼產品,就生產什麼產品,同時也讓整個系統的耦合度降低,假如業務需求更改,現在再增加一個筆記本品牌,只需實現ComputerBase類,在工廠類中再添加一個case判斷就搞定了,不需要再像之前一樣更改Main方法裡面的內容,這樣的設計是不是更加便於擴展。
本篇文章簡單工廠設計模式至此,謝謝您收看我的博客。