您的位置:首页 > 其它

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

2014-08-16 20:24 561 查看
  下机收费是一种算法,临时用户和学生下机下机就是两种算法,让我想到了使用策略模式,根据是否为临时用户和学生,选择具体的算法,这属于简单工厂,好的,简单工厂+策略模式实现下机收费
策略类-封装具体的策略

 
'封装具体的算法,需要引用一个算法
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
 
设计模式在我看来是很高大上的东西,“只可远观不可亵玩”,这次在别的同学都用的情况下,自己也尝试使用了一下设计模式(虽然用的是最简单的),觉得设计模式也可以是很接地气的东西,大家,大胆的用啊!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: