- 提供一個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類別。
![]() |
| 用簡單工廠來改進抽象工廠 |
<?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;
}
}
}


留言
張貼留言