說說設計模式(shi)~簡單工(gong)廠(chang)模式(shi)(Factory)
簡單工廠模式Simple Factory根據提供給它(ta)的(de)(de)數據,返回一個類(lei)(lei)的(de)(de)實例。通常它(ta)返回的(de)(de)類(lei)(lei)都有(you)一個公共(gong)的(de)(de)父類(lei)(lei)(或(huo)者(zhe)接口對象)。
簡單工廠的作用是實例化對象,而不需要客戶了解這個對象屬于哪個具體的子類。簡單工廠實例化的類具有相同的接口或者基類,在子類比較固定并不需要擴展時,可以使用簡單工廠。如數據庫生產工廠就是簡單工廠的一個應用。
采(cai)用(yong)簡單(dan)工廠的(de)優點(dian)是可(ke)以使用(yong)戶根據參(can)數獲得(de)對(dui)應的(de)類(lei)(lei)實例(li),避免了直接實例(li)化(hua)類(lei)(lei),降(jiang)低了耦(ou)合(he)性;缺點(dian)是可(ke)實例(li)化(hua)的(de)類(lei)(lei)型(xing)在編譯(yi)期間(jian)已經被確定,如果增(zeng)加新類(lei)(lei)
型(xing),則(ze)需(xu)要修(xiu)改工廠,不符合(he)OCP(開(kai)閉原則(ze))的(de)原則(ze)。簡單(dan)工廠需(xu)要知道(dao)所有要生成(cheng)的(de)類(lei)(lei)型(xing),當(dang)子(zi)類(lei)(lei)過多或者子(zi)類(lei)(lei)層次(ci)過多時不適合(he)使用(yong)。
下面是(shi)我實例中的類結構圖,它有(you)一個ICreate的公共(gong)接口(kou),有(you)一個方(fang)法叫Create,返回(hui)值為Void
其中公用的接口(kou)代碼如下(xia):(最后(hou)工廠的返回(hui)值類型)
1 /// <summary> 2 /// 簡(jian)單工廠接(jie)口(kou),返回值類型 3 /// </summary> 4 public interface ICreate 5 { 6 void Create(); 7 }
而下面,分別用people和animal兩個(ge)類去(qu)實(shi)現(xian)了ICreate接口,并(bing)實(shi)現(xian)了它的Create方法。
1 /// <summary> 2 /// 人類實(shi)現工廠接口 3 /// </summary> 4 public class People : ICreate 5 { 6 7 #region ICreate 成員 8 9 public void Create() 10 { 11 Console.WriteLine("創建人類(lei)"); 12 } 13 14 #endregion 15 } 16 /// <summary> 17 /// 動(dong)物實現工(gong)廠(chang)接口 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 }
而(er)對于外(wai)界來說,會有(you)另一個類去(qu)為(wei)外(wai)界提供服務(wu),它們(men)可以需要建立People或(huo)者Animal類型的實現,代碼如(ru)下:
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("類型(xing)條件名")即可生(sheng)成你的類對象了。