对于抽象工厂,大家不陌生吧,学习设计模式的时候我们就看过啦。自己开始重构的时候也是看过得。但是,纸上得来终觉浅,绝知此事要躬行啊!现在我们就来说说抽象工厂。
定义我们就不多说了,先来看看到底在哪里?里面的内容是什么吧。也就是存放在UI层的App.config
接着我们来看一下他里面的内容。
图上标注的那俩行不陌生吧,第一 行就是连接数据库的,第二行就是把SqlServer定义为DB。三层之所以解耦,之所以要用抽象工厂,就是为了实现连接数据库的时候更方便啦。我们在机房重构的时候都应该用的是sqlserver,但是我们假如现在要用access呢?是不是需要在每一个窗体里面的都改了呢?不用啦,直接在配置文件里面把access定义成DB就可以啦。
根据上面的图,我们可以知道抽象工厂的位置啦,连接B层和接口,同时D层还要实现接口,我们根据一般用户下的充值记录查询来介绍一下抽象工厂及注意事项。
<span style="font-size:18px;">Imports System.Reflection Imports System.Configuration Imports IDAL Public Class RechargeFactory Private Shared ReadOnly AssemlyName As String = "DAL" '定义程序集名称变量D层命名空间的名字 Private Shared db As String = ConfigurationManager.AppSettings("DB") Private Property AssemblyName As String = "DAL" '表示读配置文件如果配置文件中是sqlserver 就访问sqlserver数据库 ''' <summary> ''' 充值窗口的抽象工厂 ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Public Function checkCfactory() As IRecharge '创建用户表的工厂 Dim ClassName As String = AssemblyName + "." + db + "RechargeDAL" ''AssemblyName是程序集的名称,db+“UserDAL”是DAL层中的sqlServerUserDAL 如果不用SQLserver数据库,那么我们 '在建一个类 比如我们访问access数据库 那么类名称就叫accessUserDal,把配置文件 '中Value值改为Access 这样就是扩展而不是修改 Dim irecharge As IRecharge '实例化接口 '理解Assembly.Load(AssemblyName).CreateInstance(ClassName) irecharge = CType(Assembly.Load(AssemblyName).CreateInstance(ClassName), IRecharge) '将实例化的D层通过向上转型转换成接口类,然后通过调用接口类中的函数来调用D层中实现该接口的函数 Return irecharge End Function End Class </span>
<span style="font-size:18px;"> Dim ClassName As String = AssemblyName + "." + db + "RechargeDAL"</span>
这里面的DB就是我们在配置文件中定义的SqlServer啦,后面RechargeDAL是我们在连接D层的名字,也就是D层完整的名称为SqlServerRechargeDAL.
刚刚开始,还需要后面的实践来加深对代码的理解。。。。