码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-11-28 21:33:03      阅读:250      评论:0      收藏: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();
        }
    }
}

效果图:

技术分享

 

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

标签:

原文地址:http://www.cnblogs.com/caofangsheng/p/5003452.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!