前面两个已经学习简单三层到简单工厂模式的变化,但是简单工厂模式还是有个缺点,就是简单工厂中集合了所有的实例的创建。也不是很好。
现在想到使用抽象工厂的方式来实现这个:
我们在程序集中加上下面的代码:
然后新建一个抽象工厂类:
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(); } }}
效果图: