当前位置: 代码迷 >> C# >> 终极版:由简略工厂模式,升级到抽象工厂模式(用到反射)
  详细解决方案

终极版:由简略工厂模式,升级到抽象工厂模式(用到反射)

热度:204   发布时间:2016-04-28 08:29:34.0
终极版:由简单工厂模式,升级到抽象工厂模式(用到反射)

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

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

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

<appSettings>  <!--命名空间-->  <add key="DALNameSpace" value="DAL"/>  <!--程序集-->  <add key="DALAssembly" value="DAL"/></appSettings>

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

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    {       /// <summary>       ///命名空间       /// </summary>       public static string DALNameSpace       {           get            {               return ConfigurationManager.AppSettings["DALNameSpace"];           }       }       /// <summary>       /// 程序集       /// </summary>       public static string DALAssembly        {           get            {               return ConfigurationManager.AppSettings["DALAssembly"];           }       }       public IClassDAL GetClassInstance()       {           string fullNameSpace = DALNameSpace + ".ClassDAL";          return CreateInstance(fullNameSpace, DALAssembly) as IDAL.IClassDAL;       }       /// <summary>       /// 创建实例       /// </summary>       /// <param name="fullClassNameSpace"></param>       /// <param name="assembly"></param>       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();        /// <summary>        /// 获取Class列表        /// </summary>        /// <returns></returns>        public List<ClassEntity> GetList()        {            return dal.GetList();        }    }}

效果图:

 

  相关解决方案