- 提供一個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類別。
![]() |
用簡單工廠來改進抽象工廠 |
<?xml version="1.0" encoding="utf-8"?> <configuration> <appsettings> <add key="DB" value="Access"> </add></appsettings> </configuration>
using System; using System.Reflection; using System.Configuration; namespace DPExample { class User { private int _id; public int ID { get { return _id; } set { _id = value; } } private string _name; public string Name { get { return _name; } set { _name = value; } } } class Department { private int _id; public int ID { get { return _id; } set { _id = value; } } private string _deptName; public string DeptName { get { return _deptName; } set { _deptName = value; } } } interface IUser { void Insert(User user); User GetUser(int id); } class SqlserverUser : IUser { public void Insert (User user) { Console.WriteLine ("在 SQL Server 中給 User 表增加一條紀錄。"); } public User GetUser (int id) { Console.WriteLine ("在 SQL Server 中根據 ID 得到 User 表一條紀錄。"); return null; } } class AccessUser : IUser { public void Insert (User user) { Console.WriteLine ("在 Access 中給 User 表增加一條紀錄。"); } public User GetUser (int id) { Console.WriteLine ("在 Access 中根據 ID 得到 Department 表一條紀錄。"); return null; } } interface IDepartment { void Insert(Department dept); Department GetDepartment(int id); } class SqlserverDepartment : IDepartment { public void Insert (Department dept) { Console.WriteLine ("在 SQL Server 中給 Department 表增加一條紀錄。"); } public Department GetDepartment (int id) { Console.WriteLine ("在 SQL Server 中根據 ID 得到 Department 表一條紀錄。"); return null; } } class AccessDepartment : IDepartment { public void Insert (Department dept) { Console.WriteLine ("在 Access 中給 Department 表增加一條紀錄。"); } public Department GetDepartment (int id) { Console.WriteLine ("在 Access 中根據 ID 得到 Department 表一條紀錄。"); return null; } } class DataAccess { private static readonly string AssemblyName = "DPExample"; private static readonly string db = ConfigurationManager.AppSettings["DB"]; public static IUser CreateUser () { string className = AssemblyName + "." + db + "User"; IUser result = (IUser)Assembly.Load (AssemblyName).CreateInstance (className); return result; } public static IDepartment CreateDepartment () { string className = AssemblyName + "." + db + "Department"; IDepartment result = (IDepartment)Assembly.Load (AssemblyName).CreateInstance (className); return result; } } }
留言
張貼留言