引言
在计划上机功能模块的时候,计算消费金额是一个不容忽视的问题,这关系着消费者利益,我们都清楚和消费者打交道的功能一定要做活,因为我们为了促进消费会经常做些促销活动,这时候就需要我们的系统在计算消费金额的时候能很好的适应这用需求的变更,当我想到这些的时候,小菜和大鸟商讨关于商场促销的画面就浮现在脑海中,所以,我也打算在计算消费的时候,采用策略模式,下面和大家一起分享一下我的想法:
理论部分
策略模式:它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户。
类图:
2、在Strategy类层次为Context定义了一系列的可供重用的算法或行为,继承有助于析取出这些算法中的公共功能。
3、简化了单元测试,每个算法都有自己的类,可以通过自己的接口单独测试。
应用:策略模式并不是只是用来封装算法和算法打交道的,在实践中可以用它来封装几乎任何类型的规则,只要在不同的时间应用不同的业务规则,我们就可以考虑用策略模式类处理这种变化的可能性。
实践部分
介绍了一些关于策略模式的基本知识,下面就结合自己在机房重构的时候在计算上机消费的时候对策略模式的应用。
简单类图:
参考代码:
'********************************************** '说明:计算消费金额的抽象类 '命名空间:BLL '机器名称:晓 '创建日期:2015/1/8 20:01:18 '作者:郑浩 '版本号:V1.00 '********************************************** Public MustInherit Class CashSuper Public MustOverride Function AcceptCash(ByVal basicdata As Entity.EN_BasicData,ByVal consumetime As Integer) As Double End Class
Imports BLL.CashSuper ''' <summary> ''' 临时用户计算消费时间 ''' </summary> ''' <remarks></remarks> Public Class CTempUser : Inherits BLL.CashSuper Public Overloads Overrides Function AcceptCash(basicdata As Entity.EN_BasicData,consumetime As Integer) As Double Return basicdata.TempPrice * (consumetime / 60) End Function End Class
Imports BLL.CashSuper ''' <summary> ''' 固定用户的消费金额的计算 ''' </summary> ''' <remarks></remarks> Public Class FixUser : Inherits BLL.CashSuper Public Overloads Overrides Function AcceptCash(basicdata As Entity.EN_BasicData,consumetime As Integer) As Double Return basicdata.FixPrice * (consumetime / 60) End Function
Public Class CashFactory ''' <summary> ''' 消费金额计算工厂 ''' </summary> ''' <param name="type"></param> ''' <returns></returns> ''' <remarks></remarks> Public Function CreateCashAccept(ByVal type As String) As BLL.CashSuper Dim cs As BLL.CashSuper cs = Nothing Select Case type Case "临时用户" cs = New BLL.CTempUser() Case "固定用户" cs = New FixUser() End Select Return cs End Function End Class