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

四.案例分析(Example

1、场景

使用抽象工厂 + 反射 + 配置文件实现数据访问层程序。结构 如下图所示 <?XML:NAMESPACE PREFIX = O />

<?XML:NAMESPACE PREFIX = V />

 

用反射 + 抽象工厂 + 配置文件的数据访问程序。

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 、对象 Uer Product 及其相对应的操作

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 <?XML:NAMESPACE PREFIX = ST1 />Main (string [] args)

{

    IUser user = DataAccess .CreateUser();

    user.Insert();

 

    IProduct product = DataAccess .CreateProduct();

    product.GetProduct();

 

    Console .ReadKey();

}

 

五、总结(Summary

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值