重构之抽象工厂

对于抽象工厂,大家不陌生吧,学习设计模式的时候我们就看过啦。自己开始重构的时候也是看过得。但是,纸上得来终觉浅,绝知此事要躬行啊!现在我们就来说说抽象工厂。

一:配置文件

定义我们就不多说了,先来看看到底在哪里?里面的内容是什么吧。也就是存放在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.

刚刚开始,还需要后面的实践来加深对代码的理解。。。。

时间: 2025-01-01 23:45:19

重构之抽象工厂的相关文章

机房重构 抽象工厂+反射+配置文件

重构机房已经开始三个多星期了,从刚开始的一头雾水,到现在的柳暗花明,由开始的无从下手,到现在感觉犹 如脱胎换骨了般.和两个星期前相比,现在明朗了多了,心情也好了不少. 先给大家看一下这次重构的整体架构图: 在前面一篇博文中对三层(UI.BLL.DAL.Entity)http://blog.csdn.net/zhangzijiejiayou/article/details/38226135做了详细的介绍. 本篇博客着重总结一下在三层的基础上我所做的改进,也就是传说中的七层. 1.Facade层(外

设计模式学习笔记——抽象工厂

1.特点:当工厂方法无法满足多系列问题时,再重构为抽象工厂. 2.概念:抽象工厂模式为一个产品家族提供了统一的创建接口.当需要这个产品家族的某一系列的时候,可以从抽象工厂中选出相对应的系列来创建一个具体的工厂类别. 3.类图: 4.程序实现: /// <summary> /// 抽象工厂类 /// </summary> public interface IDatabaseFactory { IEmployee CreateEmployee(); IUser CreateUser()

重构机房收费系统总结1之配置文件+反射+抽象工厂

在重构机房收费系统之前就一直听说这次重构要用反射+配置文件.深远的作用不知道,但是在这次重构用到,目的还是挺明确的:就是为了更换数据时方便,遵循开放-封闭原则,解决了可维护和可扩展的问题. 下面就以机房收费系统登录为例来看看配置文件+反射的用法.机房收费系统登录用到的数据库表是User_info表(用户表).我利用的是三层思想,先看一下我的整体架构! 下面看看配置文件+反射+抽象工厂在登录时访问数据库User表时的用法. 1.先进行配置文件操作 步骤:(1)在VS资源管理器的新建项目UI中,会有

【.NET机房重构】——再看抽象工厂加反射实现登录

纯三层的机房重构终于敲完了,但是还需要加设计模式,这又是一道难题.研究了半天的时间,终于对七层的运行步骤熟悉了一些,也对抽象工厂加反射和配置文件了解的更多了一些,下面就看看我的新认识. 这是七层的包图,说是七层,但是七层并不是严格意义上的七层,只不过在三层的基础上加上了工厂.外观和接口,用到设计模式的地方多了自然就形成了一层,所以就有了现在的七层. 各层代码 界面层 分层之后界面层的功能很简单,不能再有逻辑判断,可以有些简单的是否为空或者是否为数字等. <span style="font-

第15章 就不能换DB吗?—抽象工厂模式

由于抽象工厂在我们编程当中经常使用和常见,所有本篇文章对<大话设计模式>中的15章做了很详细的比较.通过一个Dao层可以更换访问任意数据库的例子来学习抽象工厂模式.例如:Dao层可以访问Sqlserver数据库,也可以访问Access数据库,当程序新增访问Oracle数据库时,无需修改现有代码,只需要添加访问Oracle相关的类就可以,实现了开闭原则.本篇文章的例子中每种数据库上都有User和Department表,我们Dao层对这两个表进行查询和插入操作. 最基本数据库访问 一下是访问Sql

详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博文,并不是像一些"非主流"的爱情观那样"宁缺毋滥". 只是其一呢,因为相当于给自己做一个总结,加深一下自己这方面的认识,因为掌握了和把它写出来我感觉后者还可以对技能有一个提升,其二呢是因为最近公司有一个内部的training需要讲设计模式. v写在前面 在这里呢,需要向

抽象工厂模式和autofac的使用总结

抽象工厂模式和依赖注入的使用目的都是降低对象直接依赖耦合关系,应该说依赖注入是抽象工厂模式的一种升华,功能更强大. 说到抽象工厂的模式,一般都要先解释下简单工厂,简单工厂就是将对象的实例化抽取出来形成创建对象的容器.这个只是做了简单的代码重构的一种方式,谈不上模式之言. 抽象工厂实现方式是向客户端提供一个接口,使客户端不要指定具体产品对象,创建多个产品族的产品对象.将具体实例的创建延迟到对应实现的子类中. 抽象内部区别不同对象实例化可以用反射创建指定具体产品实例. autofac是依赖注入第三方

抽象工厂模式(13)

今天呢,给大家来讲一下抽象工厂模式,说到这里,大家会想到好多种关于工厂的模式,前面已经讲了两种了 简单工厂模式和工厂方法模式.好,下面我们来看一下抽象工厂模式. 同样,我们来举一个案例 一.案例 我们在做项目的时候,肯定会与数据库打交道,那么我们用简单的控制台应用程序来模拟一个向SqlServer数据库表中插入和读取的情况. 1 /// <summary> 2 /// User中的字段 3 /// </summary> 4 class User 5 { 6 private int

Java工厂模式(简单工厂、工厂方法、抽象工厂)

工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory Method).3:抽象工厂(Abstract Factory). 简单工厂(Simple Factory)又叫静态工厂,是工厂模式三中状态中结构最为简单的.主要有一个静态方法,用来接受参数,并根据参数来决定返回实现同一接口的不同类的实例.我们来看一个具体的例子:假设一家工厂,几生产洗衣机,有生产冰箱