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

本文介绍如何利用抽象工厂模式、反射技术和配置文件来实现数据访问层程序。该方案提高了程序的可维护性和可扩展性,适用于需要根据不同数据库类型进行灵活切换的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

四.案例分析(Example

1、场景

使用抽象工厂+反射+配置文件实现数据访问层程序。结构如下图所示
 
用反射+抽象工厂+配置文件的数据访问程序。
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,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值