博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
终极版:由简单工厂模式,升级到抽象工厂模式(用到反射)
阅读量:6969 次
发布时间:2019-06-27

本文共 1971 字,大约阅读时间需要 6 分钟。

前面两个已经学习简单三层到简单工厂模式的变化,但是简单工厂模式还是有个缺点,就是简单工厂中集合了所有的实例的创建。也不是很好。

现在想到使用抽象工厂的方式来实现这个:

我们在程序集中加上下面的代码:

然后新建一个抽象工厂类:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Reflection;using System.Configuration;using IDAL;namespace DALFactory{   public class DALAbstractFactory    {       ///        ///命名空间       ///        public static string DALNameSpace       {           get            {               return ConfigurationManager.AppSettings["DALNameSpace"];           }       }       ///        /// 程序集       ///        public static string DALAssembly        {           get            {               return ConfigurationManager.AppSettings["DALAssembly"];           }       }       public IClassDAL GetClassInstance()       {           string fullNameSpace = DALNameSpace + ".ClassDAL";          return CreateInstance(fullNameSpace, DALAssembly) as IDAL.IClassDAL;       }       ///        /// 创建实例       ///        ///        ///        public static object CreateInstance(string fullClassNameSpace,string assembly)       {          var DALAssembly=  Assembly.Load(assembly);         return DALAssembly.CreateInstance(fullClassNameSpace);       }    }}

上面的方法,通过反射,创建DAL数据访问层的实例。

现在在业务层,我们可以这样:

using DAL;using Entity;using IDAL;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BLL{    public class ClassBLL    {        //耦合度太高       // ClassDAL dal = new ClassDAL();        //这种还是有耦合,业务层和数据访问层耦合度太高       //IClassDAL dal = new ClassDAL();        //引入简单工厂模式        //IClassDAL dal = DALFactory.DALFactory.GetClassInstance();        //引入抽象工厂        IClassDAL dal = DALFactory.DALAbstractFactory.GetClassInstance();        ///         /// 获取Class列表        ///         /// 
public List
GetList() { return dal.GetList(); } }}

效果图:

 

转载地址:http://dfasl.baihongyu.com/

你可能感兴趣的文章
WPF:数据绑定示例总结(1)
查看>>
比特币交易(二)
查看>>
【304天】我爱刷题系列063(2017.12.06)
查看>>
ubuntu17.10设置固态ip
查看>>
Java并发编程实战笔记(5)-任务执行
查看>>
逆向app的流程
查看>>
【266天】我爱刷题系列(25)
查看>>
Git详解二(基础篇)
查看>>
Vue2.0构建——基础总结
查看>>
Flutter常见问题答疑
查看>>
原型和原型链
查看>>
U-boot登录加入密码验证
查看>>
小程序开发:上传图片到腾讯云
查看>>
翻译 | 使用A-Frame打造WebVR版《我的世界》
查看>>
React知识地图--ES6
查看>>
hexo-admin后台管理博客
查看>>
Django 用户认证
查看>>
SVG之Paths
查看>>
【面向对象的PHP】之模式:原型
查看>>
FAST_START_MTTR_TARGE 参数学习
查看>>