首页 > 代码库 > “模”法无边—策略模式+简单工厂实现下机收费

“模”法无边—策略模式+简单工厂实现下机收费

  下机收费是一种算法,临时用户和学生下机下机就是两种算法,让我想到了使用策略模式,根据是否为临时用户和学生,选择具体的算法,这属于简单工厂,好的,简单工厂+策略模式实现下机收费

策略类-封装具体的策略

 

‘封装具体的算法,需要引用一个算法

Public Class consumeContext

    Dim strategyconsume As Consume

 

    Sub New(ByRef strategy As Consume)

        Me.strategyconsume = strategy

    End Sub

 

    Public Function ContextInterface() As Double

 

        Return strategyconsume.getConsume()

    End Function

 

End Class

算法父类-提供可重写的方法和公共成员

 

Public Class Consume

 

    Protected line As LineInfo

    Protected consumemoney As Double

    Protected chargestandard As ChargeStandardInfo

    Protected count As Int16

 

    Public Overridable Function getConsume() As Double

 

    End Function

End Class

 

算法A

Public Class tempConsume

 

    Inherits Consume

 

    Sub New(ByRef line As LineInfo, ByRef chargestandard As ChargeStandardInfo)

        Me.line = line

 

        Me.chargestandard = chargestandard

    End Sub

 

    Public Overrides Function getConsume() As Double

 

        If line.ConsumeTime Mod (Convert.ToInt16(chargestandard.UnitTime)) <> 0 Then

            consumemoney = (line.ConsumeTime \ chargestandard.UnitTime + 1) * chargestandard.TempCharge

        Else

            consumemoney = (line.ConsumeTime \ chargestandard.UnitTime) * chargestandard.TempCharge

        End If

 

        Return consumemoney

 

    End Function

 

End Class

 

算法B

Public Class fixComsume

 

    Inherits Consume

 

    Sub New(ByRef line As LineInfo, ByRef chargestandard As ChargeStandardInfo)

        Me.line = line

 

        Me.chargestandard = chargestandard

    End Sub

 

    Public Overrides Function getConsume() As Double

 

        If line.ConsumeTime Mod (Convert.ToInt16(chargestandard.UnitTime)) <> 0 Then

            consumemoney = (line.ConsumeTime \ chargestandard.UnitTime + 1) * chargestandard.FixCharge

        Else

            consumemoney = (line.ConsumeTime \ chargestandard.UnitTime) * chargestandard.FixCharge

        End If

 

        Return consumemoney

    End Function

 

End Class

 

客户端代码

    ‘ 得到收费金额,虽然放在B层,但相当于客户端代码

    Public Function getConsume(ByRef member As StudentInfo, ByRef line As LineInfo, ByRef chargestandard As ChargeStandardInfo) As Double

 

        Select Case member.IsOnLine

 

            Case "True"

 

                Dim stragey As New fixComsume(line, chargestandard)

 

                Dim cashcontext As New consumeContext(stragey)

 

                Return cashcontext.ContextInterface()

 

            Case "False"

 

                Dim stragey As New tempConsume(line, chargestandard)

 

                Dim cashcontext As New consumeContext(stragey)

 

                Return cashcontext.ContextInterface()

 

        End Select

 

    End Function

 

End Class

 

设计模式在我看来是很高大上的东西,“只可远观不可亵玩”,这次在别的同学都用的情况下,自己也尝试使用了一下设计模式(虽然用的是最简单的),觉得设计模式也可以是很接地气的东西,大家,大胆的用啊!