简单工厂模式+反射来改进抽象工厂模式


抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类


用抽象工厂模式来实现数据库访问访问程序作为例子


UML图形


产品抽象类:产品有可能有许多不同的实现

具体产品:对抽象产品的具体实现

工厂类:包含所有产品创建的方法并且能够创建出具体的对象

从这张图形中来理解抽象工厂模式的定义:工厂类就是接口(DataAccess),作用是创建一系列相关或相互依赖对象(sqlUser   AccessUser   sqlDepartment AccessDepartment),我们就不必再实例化他们的具体类来得到相应的对象

代码:

反射技术的应用

用反射技术来去除switch或if,解除分支判断带来的耦合。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace 抽象工厂
{
    class DateAccess
    {
        //static静态变量或者函数可以不用实例化类而直接访问
        //定义两个私有的静态的只读的变量
        //assemblyname代表的是命名空间
        private static readonly string AssemblyName = "抽象工厂";
        //db代表的是数据库
        private static readonly string db = "sqlserver";

        //定义两个静态的函数 返回值是表的接口
        public static IUser CreatUser()
        {
            //字符串: 抽象工厂.sqlserverUser---类的名字
            string classname = AssemblyName + "." + db + "User";

            //反射的格式:最终返回的是iuser类型的 sqlserverUser类的实例
            return (IUser)Assembly.Load(AssemblyName).CreateInstance(classname);
        }

        public static IDepartment CreatDepartment()
        {
            string classname = AssemblyName + "." + db + "Department";

            //最终返回的是sqlserverDepartment类的实例
            return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(classname);
        }
    }
}








 














  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值