机房重构版——上下机判断卡号实现职责链模式。

前言:

         面对职责链模式的应用刚开始有一点抵触,因为这个模式感觉没有很好的理解。查相关的博客,看相关的书籍,而且通过问同学终于对设计模式有了相关的了解。我认为职责链模式是针对权限而言,只要是一个对象都要遍历很多类,对于符合相应类权限的就返回相应的结果,否则执行下一个。看相关的博客是关于时间的职责连,我针对上下机认为对于上机的时候判断是否存在卡号,是否已经上机,是否卡号的余额大于基本数据中的最小金额设计相关的职责连模式。

内容:

机房上机相关的UML类图:

  

相关的代码如下:

 BLL_OnCheckHandle:

  Public MustInherit Class OnCheckHandle      '设定一个抽象基类

    Protected successor As OnCheckHandle    '实例化一个类
    Public Sub setsuccessor(ByVal successor As OnCheckHandle)   '设置了继承的类。
       B Me.successor = successor
    End Sub
    Public MustOverride Function handlecheck(ByVal Request As String)
End Class



BLL_checkonehandle:判断是否存在卡号。
 Public Class checkoneHandle : Inherits OnCheckHandle    '检查是否存在卡号。    Dim flag As Boolean    
Public Overrides Function handlecheck(request As String) As Object        Dim mylist As List(Of Model.Scardmodel)        Dim fa As New Factory.factory        mylist = fa.creatmainfrm().existlinecardid(request)        
If mylist.Count = 0 Then      
      Return False          
  Exit Function     
   Else         
   Return successor.handlecheck(request)        
End If  
  End Function
End Class

BLL_checktwohandle:判断是否已经上机了。

 

--------------------- '检查是否已经上机。
'----------------------------------------------------
Public Class checktwoHandle : Inherits OnCheckHandle

    Public Overrides Function handlecheck(request As String) As Object
        Dim mylist As List(Of Model.Scardmodel)
        Dim fa As New Factory.factory
        mylist = fa.creatmainfrm().selectonline(request)
        If mylist.Count > 0 Then
            Return False
            Exit Function
        Else
            '转移到下一个对象。
            Return successor.handlecheck(request)
        End If
    End Function

End Class

BLL_checkthreehandle:判断金额是否大于最少金额

   Public Class checkThreeHandle : Inherits OnCheckHandle


    Public Overrides Function handlecheck(Request As String) As Object
        Dim fa As New Factory.factory
        '返回基本数据库中的最少金额
        Dim mylist As List(Of Model.basicdata)
        mylist = fa.creatmainfrm().basicdata()
        '返回卡表中的cash值
        Dim mylistStudent As List(Of Model.Scardmodel)
        mylistStudent = fa.creatmainfrm().existlinecardid(Request)
        '将两者进行比较。
        If mylistStudent(0).Cash < mylist(0).Limitcash Then
            Return False
        Else
            Return True
        End If
    End Function
End Class

Facade层:

 public Class checkOnLine 
 Function checkInquiryonline(request As String)
       
        Dim checkone As New BLL.checkoneHandle()    '实例化了查询是否存在卡号的类
        Dim checktwo As New BLL.checktwoHandle()    '实例化了是否已经上机类。
        Dim checkThree As New BLL.checkThreeHandle()  '实例化了是否大于最少金额类。
        '设置继任者。
        checkone.setsuccessor(checktwo)
        checktwo.setsuccessor(checkThree)

        Return checkone.handlecheck(request)

    End Function
End Class

UI层中对于返回的值进行相应反应:

 Dim request As String
        request = txtcardID.Text
        Dim facade As New Facade.facade
        If facade.checkInquiryonline(request) = False Then
            MsgBox("卡号不存在或者已经上机了,或者是金额小于等于最少金额。")
         End if 


 
总结: 

      其实在对于下机的时候依旧是可以使用职责链的,下机的设计其实也是雷同,只要判断是否存在卡号,是否已经下机,是否上机时间少于最短时间。这是我对于职责链的应用,在用的过程中我发现可以省去很多次返回U层,少了很多的if else语句,层次更加的清晰了,这是我对于设计模式的理解,希望大家提出宝贵的建议。

评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值