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