前言:
面对职责链模式的应用刚开始有一点抵触,因为这个模式感觉没有很好的理解。查相关的博客,看相关的书籍,而且通过问同学终于对设计模式有了相关的了解。我认为职责链模式是针对权限而言,只要是一个对象都要遍历很多类,对于符合相应类权限的就返回相应的结果,否则执行下一个。看相关的博客是关于时间的职责连,我针对上下机认为对于上机的时候判断是否存在卡号,是否已经上机,是否卡号的余额大于基本数据中的最小金额设计相关的职责连模式。
内容:
机房上机相关的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语句,层次更加的清晰了,这是我对于设计模式的理解,希望大家提出宝贵的建议。