前言工廠方法模式(Factory Method),定義一個用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個類。工廠方法使一個類的實(shí)例化延遲到其子類。 簡單工廠模式的最大優(yōu)點(diǎn)在于工廠類中包含了必要的邏輯判斷,根據(jù)客戶端的選擇動態(tài)實(shí)例化相關(guān)類,對于客戶端來說,去除了與具體產(chǎn)品的依賴。例如:計算器,只需要把“ ”、“-”等給客戶端,然后傳入工廠,工廠就自動給出了相應(yīng)的實(shí)例,但問題就這里,如果添加一個“*”的功能,我們一定要給工廠類的方法加‘case’判斷的,修改原有的類?這就違背了開-閉原則。 1、公共類
1 /// <summary> 2 /// 這個人會掙錢,會開公司,男人,女人都要學(xué)習(xí) 3 /// </summary> 4 public class MaYun 5 { 6 public void Money() 7 { 8 Console.WriteLine("掙錢"); 9 } 10 public void Company() 11 { 12 Console.WriteLine("開公司"); 13 14 } 15 } 1 public class Man : MaYun 2 { 3 4 } 5 public class Woman : MaYun 6 { 7 8 } ? 二、簡單工廠工廠類: 1 public class SimpleFactory 2 { 3 public static MaYun CreateMaYun(string type) 4 { 5 MaYun m = null; 6 switch (type) 7 { 8 case "Man": 9 m = new Man(); 10 break; 11 case "Woman": 12 m = new Woman(); 13 break; 14 default: 15 break; 16 17 } 18 return m; 19 } 20 } 客戶端: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 #region 簡單工廠 6 MaYun man1 = SimpleFactory.CreateMaYun("Man"); 7 man1.Money(); 8 man1.Company(); 9 MaYun woman1 = SimpleFactory.CreateMaYun("Woman"); 10 woman1.Money(); 11 woman1.Company(); 12 #endregion 13 } 14 } ? 三、工廠定義工廠接口,并讓男人的工廠和女人的工廠類繼承該接口 1 public interface IFactory 2 { 3 MaYun CreateMaYun(); 4 } 5 public class ManFactory : IFactory 6 { 7 public MaYun CreateMaYun() 8 { 9 return new Man(); 10 } 11 } 12 public class WomanFactory : IFactory 13 { 14 public MaYun CreateMaYun() 15 { 16 return new Woman(); 17 } 18 } 客戶端: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 6 #region 工廠 7 //要修改為woman,只需修改 IFactory factory = new WoManFactory(); 8 IFactory factory = new ManFactory(); 9 MaYun mm = factory.CreateMaYun(); 10 mm.Company(); 11 mm.Money(); 12 #endregion 13 } 14 } ? ? 總結(jié):1、盡管如果換成‘woman類’或者其他子類,還是要修改代碼的,但只需要修改一處就可以了。 2、工廠模式克服了簡單工廠違背開-閉原則的缺點(diǎn),又保持了封裝對象創(chuàng)建過程的優(yōu)點(diǎn)。 ? 參考書籍:大話設(shè)計模式 來源:http://www./content-4-68401.html |
|