簡單工廠模式Simple Factory根據提供給它的數據,返回一個類的實例。通常它返回的類都有一個公共的父類(或者接口對象)。
簡單工廠的作用是實例化對象,而不需要客戶了解這個對象屬於哪個具體的子類。簡單工廠實例化的類具有相同的接口或者基類,在子類比較固定並不需要擴展時,可以使用簡單工廠。如數據庫生產工廠就是簡單工廠的一個應用。
采用簡單工廠的優點是可以使用戶根據參數獲得對應的類實例,避免了直接實例化類,降低了耦合性;缺點是可實例化的類型在編譯期間已經被確定,如果增加新類 型,則需要修改工廠,不符合OCP(開閉原則)的原則。簡單工廠需要知道所有要生成的類型,當子類過多或者子類層次過多時不適合使用。
下面是我實例中的類結構圖,它有一個ICreate的公共接口,有一個方法叫Create,返回值為Void
其中公用的接口代碼如下:(最后工廠的返回值類型)
1 /// <summary> 2 /// 簡單工廠接口,返回值類型 3 /// </summary> 4 public interface ICreate 5 { 6 void Create(); 7 }
而下面,分別用people和animal兩個類去實現了ICreate接口,並實現了它的Create方法。
1 /// <summary> 2 /// 人類實現工廠接口 3 /// </summary> 4 public class People : ICreate 5 { 6 7 #region ICreate 成員 8 9 public void Create() 10 { 11 Console.WriteLine("創建人類"); 12 } 13 14 #endregion 15 } 16 /// <summary> 17 /// 動物實現工廠接口 18 /// </summary> 19 public class Animal : ICreate 20 { 21 22 #region ICreate 成員 23 24 public void Create() 25 { 26 Console.WriteLine("創建動物"); 27 } 28 29 #endregion 30 }
而對於外界來說,會有另一個類去為外界提供服務,它們可以需要建立People或者Animal類型的實現,代碼如下:
1 public class CreateFactory 2 { 3 public static ICreate GeneratorCreate(string createName) { 4 switch (createName) 5 { 6 case "People": 7 return new People(); 8 case "Animal": 9 return new Animal(); 10 default: 11 throw new NotImplementedException(); 12 } 13 }
最后,在使用它時,直接使用CreateFactory.GeneratorCreate("類型條件名")即可生成你的類對象了。