一、定義
定義無需贅述,根據引數判斷例項化哪個物件。替換讓人眼花繚亂的if語句。
二、例項程式碼
定義介面:
public interface IService { }
BL和WCF繼承並實現:
public class BL:IService { public BL() { Console.WriteLine("BL."); } }
public class WCF:IService { public WCF() { Console.WriteLine("WCF."); } }
最後就是我們根據引數指定建立物件:
public class FactoryBuilder { public static IService Create (string key) { IService service; switch (key.ToLower()) { case "bl":service = new BL();break; case "wcf": service = new WCF();break; default: throw new System.Exception(string.Format("Key:{0} is wrong", key)); } return service; } }
客戶端呼叫:
//簡單工廠模式
Factory.IService service = Factory.FactoryBuilder.Create("BL");
三、優缺點
優:簡單實用,很多地方可以使用。客戶端不用關心怎麼建立什麼例項,只管傳參。
缺:違背了,對修改封閉,對擴充套件開放的原則。因為每次新增新的服務型別,我們都要修改工廠類。。。