机房重构职责链模式-上机
来源:互联网 发布:php 策略模式应用场景 编辑:程序博客网 时间:2024/05/18 19:22
前言
在敲上机的时候突然特别的麻烦,调来调取,7层需要走好几次,感觉特别麻烦并且代码都是重复的!感觉没有意思,通过看师哥师姐的博客才知道如何和解决这个问题,利用职责链模式解决问题,减少了重复的代码,ps上机的时候需要判断卡号是否存在,卡号余额是否满足基本数据表中的数据,查看卡号是否正在上机。如果不用职责链模式真的是太麻烦了,深刻的体会到模式的重要性
职责链模式见解
职责链模式属于行为模式。使多个对象都有机会处理请求,从而避免发送者和接受之间的耦合关系,见这些对象连成一条链,并沿着这条链请求,知道有一个对象处理它为止
例子
其实职责链模式就像我们在学校请长期假一样,当我们要请一个月的假的时候,我们需要先向老师申请,如果老师不知道则向主任申请,如果主任不知道则向校长,知道有一个知道为止,如果有一个人同意,则直接通过请假这一条链告诉学习最终结果。这就是职责链模式
如图:
职责链模式解释
1.职责链模式,由一个对象引出另一个对象,连接成一条链
2.在这个请求连上,最终会找到一个对象处理此请求为止
3.在客户端发生请求的时候,并不知道最后是谁处理了这个请求,从而减低了耦合,并且在不印象客户端的情况下,可以动态的重新组织连和分配责任
什么时候用?
当有多个对象,但是你不确定是哪个对象可以解决问题
请求的对象可以动态的指定分配
’
重构职责链模式上机代码
UI层
'用于查看卡,余额,上机实体 Dim cardInfo As New Entity.ChaEntity '用于查看卡,余额,上机实体 Dim UserInfo As New Entity.ChaEntity '向上机表中添加数据实体 Dim OnlineInfo As New Entity.ZenEnity '用于查看卡,余额,上机的结果 Dim strResult As Boolean '想上机表中查数据 Dim table1 As Boolean cardInfo.cardID = txtcarID.Text.Trim '把实体送到外观 strResult = selectFacade.CheckOnline(cardInfo) '对返回结果进行判断 If strResult = False Then MsgBox("卡号不存在或者已经上机,小于最小金额", vbOKOnly)
外观层
Public Function CheckOnline(ByVal cardinfo As Entity.ChaEntity) As Boolean Dim checkCard As New BLL.checkCardBLl '判断卡号是否存在 Dim checkMoney As New BLL.CheckMoneyBLL '判断余额 Dim checkOn As New BLL.checkOn '判断是否在上机 '职责链模式核心,形成一条链 checkCard.setsuccessor(checkMoney) '查询卡号之后 checkMoney.setsuccessor(checkOn) '查询余额之后 Return checkCard.handlecheck(cardinfo) '第一个先查询卡号 End Function
BLL层
checkCardBLL类
#Region "上机表中查看是否有卡号" Dim flag As Boolean Dim table As New DataTable Public Overrides Function handlecheck(cardInfo As Entity.ChaEntity) As Object '定义接口 Dim icheckCard As IDAL.ChaXInxiIDAL '定义泛型 Dim list As New List(Of Entity.ChaEntity) '定义工厂 Dim checkCardfA As New Factory.ChaFactory '通过接口得到工厂中的内容 icheckCard = checkCardfA.InquiryBalanceChaFAY() '通过泛型传给D层 list = icheckCard.IselectCard(cardInfo) '对返回的数据进行判断,小于0则说明没有卡号,则提示用户,如何大于0则接着向下面进行判断 If list.Count <= 0 Then Return False Exit Function Else '设置下一个继承者,给余额 Return sucessor.handlecheck(cardInfo) End If End Function#End Region
CheckMoneyBLL类
Region "查询基本表中的最少金额和卡表中的余额进行判断,查看是否符合要求" Public Overrides Function handlecheck(cardInfo As Entity.ChaEntity) As Object '从基本表中查最少余额 '定义泛型 接口 工厂 Dim list As New List(Of Entity.ChaEntity) Dim icheckCash As IDAL.ChaXInxiIDAL Dim factory As New Factory.ChaFactory '利用接口知道工厂 icheckCash = factory.InquiryBalanceChaFAY '实现D层的类,基本数据表 list = icheckCash.IselectMoney() '查卡里的余额 '定义泛型 接口 工厂 Dim mylist As New List(Of Entity.ChaEntity) Dim iselectcard As IDAL.ChaXInxiIDAL Dim factory1 As New Factory.ChaFactory '利用接口知道工厂 iselectcard = factory1.InquiryBalanceChaFAY '实现D层的类,卡表 mylist = iselectcard.IselectMoney(cardInfo) '对基本表中的余额与卡表中的余额进行对比,如果为false则不可以上机,否则下一位继承者 If mylist(0).Cash < list(0).leastMoney Then Return False Else Return sucessor.handlecheck(cardInfo) '下一位查看是否上机 End If End Function#End Region
checkOn类
#Region "查看上机表中,此卡号是否为上机" Public Overrides Function handlecheck(cardInfo As Entity.ChaEntity) As Object '定义泛型,接口,工厂 Dim IcheckOn As IDAL.ChaXInxiIDAL Dim list As New List(Of Entity.ChaEntity) Dim factory As New Factory.ChaFactory '通过接口得到工厂 IcheckOn = factory.InquiryBalanceChaFAY '实现D层方式,上机表 list = IcheckOn.IselectON(cardInfo) '判断如果小于=0则说明没有上机,则返回true,可以上机,否则false If list.Count <= 0 Then Return True Exit Function Else Return False End If End Function#End Region
DAL层
#Region "上机时查看是否有此卡号,查看卡表余额和基本数据余额,查看是否上机"#Region "上机时查看是否有此卡号" Public Function selectCard(cardinfo As ChaEntity) As List(Of ChaEntity) Implements ChaXInxiIDAL.IselectCard '声明与实例化参数数组,把内容传递给字符串。例如"@cardID" Dim paras As SqlParameter() = {New SqlParameter("@cardID", cardinfo.cardID), New SqlParameter("@Status", "使用")} '通过视图中的表得到我们想要的信息 cmdText = "select * from T_CardInfo where cardID =@cardID" '定义临时保存数据的虚拟表 Dim dt As New DataTable '声明一个泛型类 Dim table As New List(Of Entity.ChaEntity) '从sqlhelper中的ExecDataTable类中,把数据给DataTable dt = sqlhelper.ExecDataTable(cmdText, CommandType.Text, paras) table = ConverHelper.ConvertHelper.convertToList(Of Entity.ChaEntity)(dt) '如果大于0则判断有卡号,继续向下执行,否则返回结果 Return table End Function#End Region#Region "查看是否有次卡号" Public Function selecton(cardinfo As ChaEntity) As List(Of ChaEntity) Implements ChaXInxiIDAL.IselectON '声明一个泛型类 Dim table As New List(Of Entity.ChaEntity) '定义临时保存数据的虚拟表 Dim dt As New DataTable '声明与实例化参数数组,把内容传递给字符串。例如"@cardID" Dim paras As SqlParameter() = {New SqlParameter("@cardID", cardinfo.cardID), New SqlParameter("@Status", "上机")} cmdText = "select * from Online_Info where cardID =@cardID and Status=@Status" dt = sqlhelper.ExecDataTable(cmdText, CommandType.Text, paras) table = ConverHelper.ConvertHelper.convertToList(Of Entity.ChaEntity)(dt) Return table End Function#End Region#Region "查看该卡号的余额是多少" Public Function selectMOney(cardinfo As ChaEntity) As List(Of ChaEntity) Implements ChaXInxiIDAL.Iselectmoney '声明一个泛型类 Dim table As New List(Of Entity.ChaEntity) '定义临时保存数据的虚拟表 Dim dt As New DataTable '声明与实例化参数数组,把内容传递给字符串。例如"@cardID" Dim paras As SqlParameter() = {New SqlParameter("@cardID", cardinfo.cardID), New SqlParameter("@Status", "使用")} cmdText = "select * from T_CardInfo where cardID =@cardID" dt = sqlhelper.ExecDataTable(cmdText, CommandType.Text, paras) table = ConverHelper.ConvertHelper.convertToList(Of Entity.ChaEntity)(dt) Return table End Function#End Region#Region "查余额是否满足基本数据表" Public Function checkMoney() As List(Of ChaEntity) Implements ChaXInxiIDAL.Iselectmoney '声明与实例化参数数组,把内容传递给字符串。例如"@cardID" '通过视图中的表得到我们想要的信息 cmdText = "select * from T_BasicData" '定义临时保存数据的虚拟表 Dim dt As New DataTable '声明一个泛型类 Dim table1 As New List(Of Entity.ChaEntity) '从sqlhelper中的ExecDataTable类中,把数据给DataTable dt = sqlhelper.CheckDataTable(cmdText, CommandType.Text) '把dt转换为泛型 table1 = ConverHelper.ConvertHelper.convertToList(Of Entity.ChaEntity)(dt) '返回泛型的数据 Return table1 End Function#End Region#End Region
总结
上机的时候需要判断卡号是否存在,卡号余额是否满足基本数据表中的数据,查看卡号是否正在上机。利用职责链模式我们首先找到卡号,如果有此卡号则链接到余额是否满足要求,如果满足要求则链接到是否上机,如果成功则上机成功,否则提出错误。
2 0
- 机房重构职责链模式-上机
- 【机房重构】--职责链模式实现上机
- 【机房重构】职责链模式之上机
- 机房重构--职责链模式应用
- 机房重构之职责链模式
- 职责链模式实现机房上机
- 【机房重构】--职责链模式+策略模式 实现下机
- 机房上机--职责连模式
- 机房重构——下机(职责链模式+策略模式)
- 【机房重构】下机——职责链模式+策略模式(理论篇)
- 【机房重构】下机——职责链模式+策略模式(实践篇)
- 职责链模式应用——下机(机房重构知识点总结)
- 机房重构——职责链模式搞定计算下机时间问题
- 【机房重组】 职责链模式
- 【机房重构个人版】上下机与职责链
- 【机房重构】—上机&订餐
- 机房合作之职责链模式
- 个人机房重构——下机与职责链的结合
- Linux ALSA声卡驱动之四:Control设备的创建
- 关于The reference to entity "characterEncoding" must end with the ';' delimiter. org.xml.sax.SAXParseE
- caffe编译出现 "libcudart.so.8.0 cannot open shared object file: No such file or directory"的错去
- C语言getopt()函数的使用
- java小工具-内存分析,线程分析,性能分析
- 机房重构职责链模式-上机
- android studio正确加载so文件及出现的问题(32位,64位文件的正确使用)
- Apache 的 httpd.config 的详解
- 二分贪心 U 堆墙
- 特征脸(Eigenface)理论基础-PCA(主成分分析法)
- thinkphp 如何实现点击一次关闭,再点击一次为开启。
- caffe2 01 caffe2 win10 vs2017编译(默认CPU版本)
- Python学习笔记 --- 学会super用法
- Scrapy安装