概述
在軟體系統中,經常面臨著“一系列相互依賴的對象”的建立工作;同時由於需求的變化,往往存在著更多系列對象的建立工作。如何應對這種變化?如何繞過常規的對象的建立方法(new),提供一種“封裝機制”來避免客戶程式和這種“多系列具體對象建立工作”的緊耦合?這就是我們要說的抽象原廠模式。
簡而言之: 通過傳入"類名", 建立不同的對象.
意圖
提供一個建立一系列相關或相互依賴對象的介面,而無需指定它們具體的類。
類: CAdmin(管理員類), CUser(普通使用者類)
介面: IUser(使用者類)
關係: CAdmin(管理員類), CUser(使用者類) 都實現 IUser介面
類: CAdmin(管理員類)
namespace WebApplication1{ public class CAdmin:IUser { #region IUser 成員 public string GetName() { return "我是管理員, 小樣敢亂髮言逮捕!"; } #endregion }}
類: CUser(普通使用者類)
namespace WebApplication1{ public class CUser:IUser { #region IUser 成員 public string GetName() { return "我是普通使用者!"; } #endregion }}
介面: IUser(使用者類)
namespace WebApplication1{ interface IUser { string GetName(); }}
調用(實現部分):
//使用者物件protected void Button1_Click(object sender, EventArgs e){Label1.Text = GetName("WebApplication1.CUser");}//管理員對象protected void Button2_Click(object sender, EventArgs e){Label2.Text = GetName("WebApplication1.CAdmin");}//得到名字, 當然還有簡短的話 - -public string GetName(string className){IUser user = (IUser)Assembly.Load("WebApplication1").CreateInstance(className);return user.GetName();}
源碼下載