抽象工廠模式:提供一個創建一系列相關或相互依賴對象的介面,而無需指定它們具體的類。 最大的好處便是易於交換產品系列,由於具體工廠類,在一個應用中只需在初始化的時候出現一次,這就使得改變一個應用的具體工廠變得非常容易,它只需改變具體工廠即可使用不同的產品配置。 他使具體創建實例的過程與客戶端分離,客戶 ...
抽象工廠模式:提供一個創建一系列相關或相互依賴對象的介面,而無需指定它們具體的類。
最大的好處便是易於交換產品系列,由於具體工廠類,在一個應用中只需在初始化的時候出現一次,這就使得改變一個應用的具體工廠變得非常容易,它只需改變具體工廠即可使用不同的產品配置。
他使具體創建實例的過程與客戶端分離,客戶端是通過它們的抽象介面操縱實例,產品的具體類名也被具體工廠的實現分離。
下麵的代碼還使用了反射與XML.
代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Reflection; using System.Configuration; namespace 設計模式之抽象工廠模式2 { class Deparentment{ } interface IDepartment { void Insert(Deparentment department); Deparentment GetDepartment(); } class SqlserverDepartment : IDepartment { public void Insert(Deparentment deparent) { Console.WriteLine("在SQL中為deparent表增加了一條記錄"); } public Deparentment GetDepartment() { Console.WriteLine("從SQL中的deparent表中取出了一條記錄"); return new Deparentment(); } } class AccessDeparent:IDepartment { public void Insert(Deparentment deparent) { Console.WriteLine("在Access中為deparent表增加了一條記錄"); } public Deparentment GetDepartment() { Console.WriteLine("從Access中的deparent表中取出了一條記錄"); return new Deparentment(); } } class User { } interface IUser { void Insert(User u); User GetUser(); } class SqlUser:IUser { public void Insert(User u) { Console.WriteLine("在Sql中向User表中添加了一條記錄"); } public User GetUser() { Console.WriteLine("從SQL中的User表中取出了一條記錄"); return new User(); } } class AccessUser:IUser { public void Insert(User u) { Console.WriteLine("在Accesss中向User表中添加了一條記錄"); } public User GetUser() { Console.WriteLine("從Access中的User表中取出了一條記錄"); return new User(); } } class DataAccess { private static readonly string AssemblyName = "設計模式之抽象工廠模式2"; private static readonly string db = ConfigurationManager.AppSettings["DB"]; public static IUser CreateUser() { string className = AssemblyName + "." + db + "User"; return (IUser)Assembly.Load(AssemblyName).CreateInstance(className); } public static IDepartment CreateDeparent() { string className = AssemblyName + "." + db + "Department"; return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className); } } class Program { static void Main(string[] args) { User user = new User(); Deparentment dept = new Deparentment(); IUser iu = DataAccess.CreateUser(); iu.Insert(user); iu.GetUser(); Console.Read(); } } }
XML文件:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <add key="DB" value="Access"/> </appSettings> </configuration>
運行結果: