所谓的专家,就是在一个非常小的领域把全部的错误都犯过的人
---------题记
做机房收费系统也有一段时间了,眼下已经进行到学生下机操作了。由于学生下机操作时,须要依据不同用户的类别,来进行对应的结账服务,于是乎就想到了曾经学习到的设计模式,那么针对这个问题,能够用到那些模式呢?小编在这里总结一下。(可能有些模式过于勉强,但这都无所谓,学习的真谛就在于此,不断的反复和实验)
-------------------------------------------------------------------------------------------------------------------------------------------------------
前言
先分析下下机须要用到的数据
固定用户每小时费用:代表会员级别每小时花费金额
暂时用户每小时费用:代表暂时用户每小时花费金额
至少上机时间:学生假设上机时间小于此的话,就按此时间计算
准备时间:此时间不计算在学生上机时间里面
至少金额:上机时间小于至少上机时间的,就按此计算
策略模式
策略模式曾经也写过类似的博客,连接例如以下
策略模式总结
类图
Strategy接口:封装了不同类别用户计算金额的算法
Context类:封装了不同的角色,当外部调用时,无须知道算法,直接实例化该类就可以
代码:
'''
''' 策略的接口
'''
'''
Public Interface Strategy
'''
'''
'''
''' 花费的时间
''' 不同类型用户上机每小时花费金额
''' 返回消费的金额
'''
Function ConsumeMoney(ByVal consumeTime As Single, bill As Single) As Single
End Interface
'''
''' 固定用户实现接口
'''
'''
Public Class regularUser
Implements Strategy
Public Function ConsumeMoney(consumeTime As Single, bill As Single) As Single Implements Strategy.ConsumeMoney
'假设小于准备时间的话,不收费的
If consumeTime < 5 Then
Return 0
'假设小于最少上机时间的话,就收费最少金额
ElseIf consumeTime > 5 And consumeTime < 30 Then
Return 2
Else
Return bill / 60 * consumeTime
End If
End Function
End Class
Public Class context
'抽象策略
Dim strategy As Strategy = Nothing
'构造函数设置详细策略
'注意在vb.net中使用sub new()keyword来使用构造函数
Sub New(ByVal _strategy As Strategy)
Me.strategy = _strategy
End Sub
'封装后的策略方法
Public Sub count(ByVal consumeTime As Single, bill As Single)
Me.strategy.ConsumeMoney(consumeTime, bill)
End Sub
End Class
特别声明:这仅仅是一个学生下机结账的小Demo。
未完待续……