Net设计模式之抽象工厂模式(Abstract Factory Pattern)(2)

四.案例分析(Example

1、场景

使用抽象工厂+反射+配置文件实现数据访问层程序。结构如下图所示
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"/>
    <appSettings>
<configuration>
通过读配置文件给DB字符赋值,在配置文件中写明当前使用的是SqlServer 还是Access数据库。反射+抽象工厂+配置文件解决方案解决了数据访问时的可维护、可扩展问题
 

2、代码

1、对象UerProduct及其相对应的操作
public interface IUser
{
    void Insert();
}
 
public class SqlServerUser:IUser
{
    public void Insert()
    {
        Console.WriteLine("{0}插入用户.",this.GetType().Name);
    }
}
 
public class AccessUser : IUser
{
    public void Insert()
    {
        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
{
    public void GetProduct()
    {
        Console.WriteLine("{0}查询商品."this.GetType().Name);
    }
}
 
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();
}
 

五、总结(Summary

抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类。抽象工厂模式的典型应用就是,使用抽象工厂+反射+配置文件实现数据访问层程序。









本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/260399,如需转载请自行联系原作者