“模”法无边—策略模式+简单工厂实现下机收费
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 |
设计模式在我看来是很高大上的东西,“只可远观不可亵玩”,这次在别的同学都用的情况下,自己也尝试使用了一下设计模式(虽然用的是最简单的),觉得设计模式也可以是很接地气的东西,大家,大胆的用啊!
相关文章推荐
- 简单工厂设计模式实现商店买牙膏收费案例过渡到结合策略模式的理由全解
- 策略模式与简单工厂的C++实现
- SqlHelper简单实现(通过Expression和反射)6.Providor模式(工厂+策略)可配置数据库选择
- 设计模式-简单工厂设计模式与策略模式之java实现
- 设计模式学习笔记一 简单工厂策略模式实现销售策略的变更(一)
- 设计模式-简单工厂设计模式与策略模式之java实现二
- 机房重构利用策略模式+简单工厂实现消费金额的计算
- 机房重构利用策略模式+简单工厂实现消费金额的计算
- 简单工厂和策略模式的区别
- 策略模式结合简单工厂模式
- 大话设计模式-策略模式与简单工厂模式
- 有趣的Java - 简单使用enum实现策略模式Strategy
- 策略模式与简单工厂模式
- 1.用C#的泛型实现简单的工厂模式
- 设计模式解读 之策略模式(参照策略模式与简单工厂模式的对比)
- 策略模式+简单工厂=强强联合
- vb.net 中通过反射实现简单工厂模式
- 策略模式结合简单工厂模式
- 设计模式之—简单工厂方法(StaticFactory )-Java实现
- 大话设计模式之C++实现---简单工厂模式