說說設計模式~簡單工廠模式(Factory)


返回目錄  

 簡單工廠模式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("類型條件名")即可生成你的類對象了。

 

 返回目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM