设计模式——职责链模式实现消费时间计算

     前言

  在这个合作中又尝试使用了新的设计模式,在自己的第一个合作项目中学到了很多,每个人对这个项目都有自己想法,所以我们每一个人都在尝试新的知识,我们也是对于新的想法我们都会加以运用,在计算上机时间的时候,我们的项目中采用了职责连模式,而我正好是负责B层的工作,所以就学习了这个模式,下面就和大家分享一下我的学习。

   基本概念

  职责连模式:是多个对象都有机会处理请求,从而避免请求的发送者和接受着之间的耦合关系,将这个对象练成一条链,并沿着这条连传递请求,直到有一个对象处理它为止。
  举例:当我们在提高班请假的时候,如果我们请假的时间不超过两个小时,我们就可以将申请直接提交给纪委,纪委就可以直接处理,但是当我们请假的时间超过两个小时,我们就必须反映到米老师哪,米老师才能处理这个事情,纪委就不能处理。这就一级级的向上走,直到这个请求被处理才结束。

   基本结构图

        

  机房实例

  在机房收费系统中,当我们进行下机的时候需要计算消费金额,但是我们在计算的时候需要考虑到,开机准备时间,最少消费时间等,所以我们需要判断我们实际消费的时间和这些时间的关系才能计算出我们上机消费的真正的时间。

  基本类图

    

  基本代码实现

 TimeCountBLL类:
  
Public MustInherit Class TimeCountBLL

    '设置继任者(上级)
    Property Successor As TimeCountBLL
    Public Sub SetSuccessor(ByVal Successor As TimeCountBLL)
        Me.Successor = Successor
    End Sub

    '处理请求时间
    Public MustOverride Function HandleTime(ByVal timeCount As Integer) As Integer

End Class ' TimeCountBLL

 LittleThanPreTime类:

Public Class LittleThanPreTime : Inherits TimeCountBLL

    Private preparetime As Integer
    ''' <summary>
    ''' 访问后继者
    ''' </summary>
    ''' <param name="timeCount"></param>

    Public Overloads Overrides Function HandleTime(timeCount As Integer) As Integer
        '获取准备时间

        'preparetime = BLL.basicDataSetBLL.basicdata(0).prepareTime
        If timeCount < preparetime Then
            Return 0
        Else
            Return Successor.HandleTime(timeCount)   '转移到最少上机时间
        End If

    End Function
    ''' <summary>
    ''' 构造函数传入准备时间
    ''' </summary>
    ''' <param name="endDataBasic"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal endDataBasic As List(Of Entity.basicdataEntity))
        Me.preparetime = CInt(BLL.basicDataSetBLL.basicdata(0).prepareTime.ToString)
    End Sub
End Class ' LittleThanPreTime

 LittleThanLimitTime类:

''' <summary>
''' 大于准备时间小于最少上机时间时
''' </summary>
Public Class LittleThanLimitTime : Inherits TimeCountBLL


    Private leastTime As Integer

    ''' <summary>
    ''' 访问后继者
    ''' </summary>
    ''' <param name="timeCount"></param>

    Public Overrides Function HandleTime(timeCount As Integer) As Integer

        leastTime = CInt(BLL.basicDataSetBLL.basicdata(0).limitTime.ToString)
        If timeCount <= leastTime Then
            Return leastTime
        Else
            Return Successor.HandleTime(timeCount)
        End If

    End Function
    ''' <summary>
    ''' 构造函数获得至少上机时间
    ''' </summary>
    ''' <param name="endDataBasic"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal endDataBasic As List(Of Entity.basicdataEntity))
        Me.leastTime = CInt(BLL.basicDataSetBLL.basicdata(0).limitTime.ToString)
    End Sub
End Class ' LittleThanLimitTime

MoreThanLimitTime类:

''' <summary>
''' 单位递增时间
''' </summary>
Public Class MoreThanLimitTime : Inherits TimeCountBLL

    Private unitTime As Integer
    Public Overrides Function HandleTime(timeCount As Integer) As Integer
        Return timeCount
    End Function
    ''' <summary>
    '''构造函数获取单位递增时间
    ''' </summary>
    ''' <param name="endDataBasic"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal endDataBasic As List(Of Entity.basicdataEntity))
        Me.unitTime = CInt(BLL.basicDataSetBLL.basicdata(0).unitTime.ToString)
    End Sub
End Class ' MoreThanLimitTime

 Facade类:

    ''' <summary>
    ''' 计算下机的时候消费的时间
    ''' </summary>
    ''' <param name="onLineTime"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function costTimeCount(ByVal onLineTime As Integer) As Integer

        Dim LittleThanPreTime As New BLL.LittleThanPreTime(BLL.basicDataSetBLL.basicdata)
        Dim MoreThanLimitTime As New BLL.MoreThanLimitTime(BLL.basicDataSetBLL.basicdata)
        Dim LittleThanLimitTime As New BLL.LittleThanLimitTime(BLL.basicDataSetBLL.basicdata)
        '设置上级
        LittleThanPreTime.SetSuccessor(LittleThanLimitTime)
        LittleThanLimitTime.SetSuccessor(MoreThanLimitTime)
        Return LittleThanPreTime.HandleTime(onLineTime)

 在设置上级的时候,一定要注意从哪一级开始执行,它的下一级是是谁的问题,在第一变的时候,我在设置上机的时候,前后是同一级别,导致系统进入死循环。

  小结

 首先感谢组长给这次负责B层的机会,在实现的过程中对设计模式又有了更深的认识,并且对泛型的学习更为深入,在自己重构的时候没有怎么用到泛型,知识在系统做完以后,在个别功能上面添加了泛型。但是在这此合作中我们都是用的泛型。总之在这个过程中学到了很多,我们并且自始至终都非常快乐,积极!!可以说自己的第一个合作项目顺利结束。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

g-Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值