首页 > 代码库 > “模”法无边—策略模式+简单工厂实现下机收费
“模”法无边—策略模式+简单工厂实现下机收费
下机收费是一种算法,临时用户和学生下机下机就是两种算法,让我想到了使用策略模式,根据是否为临时用户和学生,选择具体的算法,这属于简单工厂,好的,简单工厂+策略模式实现下机收费
策略类-封装具体的策略
| ‘封装具体的算法,需要引用一个算法 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 |
设计模式在我看来是很高大上的东西,“只可远观不可亵玩”,这次在别的同学都用的情况下,自己也尝试使用了一下设计模式(虽然用的是最简单的),觉得设计模式也可以是很接地气的东西,大家,大胆的用啊!