天天看點

Net設計模式之抽象工廠模式(Abstract Factory Pattern)(2)

使用抽象工廠+反射+配置檔案實作資料通路層程式。結構如下圖所示

用反射+抽象工廠+配置檔案的資料通路程式。

Assembly.Load("程式集名稱").CreateInstance("命名空間.類名稱")。比如:

IProduct product=(IProduct)Assembly.Load("抽象工程模式").CreateInstance("抽象工程模式.SqlServerProduct")。

常用做法是:

Private static readonly string AssemblyName="抽象工程模式";

Private static readonly string DB=ConfiurationManager.AppSettings["db"];

配置檔案如下:

<configuration>

    <appSettings>

         <add key="db" value="Sqlserver"/>

通過讀配置檔案給DB字元指派,在配置檔案中寫明目前使用的是SqlServer 還是Access資料庫。反射+抽象工廠+配置檔案解決方案解決了資料通路時的可維護、可擴充問題

1、對象Uer、Product及其相對應的操作

public interface IUser

{

    void Insert();

}

public class SqlServerUser:IUser

    public void Insert()

    {

        Console.WriteLine("{0}插入使用者.",this.GetType().Name);

    }

public class AccessUser : IUser

        Console.WriteLine("{0}插入使用者.", this.GetType().Name);

public interface IProduct

    void GetProduct();

public class SqlServerProduct : IProduct

    public void GetProduct()

        Console.WriteLine("{0}查詢商品.", this.GetType().Name);

public class AccessProduct : IProduct

2、資料通路類DataAccess

public class DataAccess

    private static readonly string AssemblyName = "AbstractFactoryReflection";

    private static readonly string db = "SqlServer";

    public static IUser CreateUser()

        string className = AssemblyName + "." + db + "User";

        IUser user = (IUser)Assembly.Load(AssemblyName).CreateInstance(className);

        return user;

    public static IProduct CreateProduct()

        string className = AssemblyName + "." + db + "Product";

        return (IProduct)Assembly.Load(AssemblyName).CreateInstance(className);

3、用戶端代碼

static void Main(string[] args)

    IUser user = DataAccess.CreateUser();

    user.Insert();

    IProduct product = DataAccess.CreateProduct();

    product.GetProduct();

    Console.ReadKey();

抽象工廠模式(Abstract Factory Pattern),提供一個建立一系列相關或者互相依賴對象的接口,而無需制定他們的具體類。抽象工廠模式的典型應用就是,使用抽象工廠+反射+配置檔案實作資料通路層程式。

本文轉自 靈動生活 51CTO部落格,原文連結:http://blog.51cto.com/smartlife/260399,如需轉載請自行聯系原作者