题记:写这篇博客要主是加深自己对用户调用的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。
合作开发中责负业务逻辑成.所以就有一些的算法和模式,上面就说下下机的基本操作.用到的有责职链和策略两种设计模式
责职链:
是使多个对象都有会机处置求请。从而免避求请的发送者和接收者之间的耦合关系。
将这个对象连成一条链。沿着链传递该求请。直到有一个对象处置为止。
策略:
定义了一组算法。 让它们之间可以互相提哈追。此模式让算法的化变,不会影响到用使算法的客户。
策略模式这里用到的是牢固用户和时临用户的不同的收费情况
首先也是定义一个抽象的类基, 包括全部支撑的算法的共有口接
类子详细化策略类,封装了算法的行为,承继于类基
对于CashContext是对抽象类的引用, 并得获它们详细的花费
上面看详细实例
抽象类:
包括了抽象的算法,让类子去实现算法
'''<summary> ''' 结账类,处置上机花费题问,抽象类 ''' </summary> PublicMustInheritClassCashierBLL ''' <summary> ''' 根据上机间时、卡的型类,算计花费金额,(抽象方法) ''' </summary> ''' <param name="onlineTime">上机间时,间时单位为分钟</param> ''' PublicMustOverrideFunction GetConsumeMoney(ByVal onlineTime AsInteger)AsSingle EndClass'
牢固用户类:
包括有构造方法,初始化牢固用户的基本费用
'''<summary> '''牢固用户花费金额处置 '''</summary> PublicClassRegularBLL Inherits Charge.ChargeBLL.CashierBLL Private moneyRegularHourAsSingle'定义牢固用户每小时费用 '''<summary> '''根据上机间时,算计牢固用户此次上机花费金额 '''</summary> '''<param name="onlineTime">上机间时,间时单位为分钟</param> PublicOverridesFunction GetConsumeMoney(ByVal onlineTimeAsInteger)AsSingle Dim consumeAsSingle'定义花费金额 '算计花费金额 consume =CSng(onlineTime) *CSng(moneyRegularHour / 60) Return consume EndFunction '''<summary> '''构造方法初始化牢固用户费用 '''</summary> PublicSubNew(moneyRegularHourAsSingle) Me.moneyRegularHour = moneyRegularHour EndSub EndClass' RegularBLL
时临用户类:
'''<summary> '''时临用户花费金额处置 '''</summary> PublicClassTemporaryBLL Inherits Charge.ChargeBLL.CashierBLL Private moneyTemporaryHalfHourAsSingle'时临用户半小时费用 '''<summary> '''根据上机间时,算计时临用户花费金额 '''</summary> '''<param name="onlineTime">上机间时,间时单位为分钟</param> PublicOverridesFunction GetConsumeMoney(ByVal onlineTimeAsInteger)AsSingle Dim consumeAsSingle'定义花费金额 '算计花费金额 consume =CSng(onlineTime) *CSng(moneyTemporaryHalfHour / 30) Return consume EndFunction '''<summary> '''构造方法 '''</summary> PublicSubNew(moneyTemporaryHalfHourAsSingle) Me.moneyTemporaryHalfHour = moneyTemporaryHalfHour EndSub EndClass' TemporaryBLL
Context类的引用
对抽象类的引用
'''<summary> '''花费金额配置类 '''</summary> PublicClassCashContextBLL '''<summary> '''花费金额处置 '''</summary> Private cashierAsCashierBLL Public m_CashierAsCashierBLL '''<summary> '''根据详细的Cashier对象,调用其算计花费金额的算法的方法 '''</summary> '''<param name="onlineTime">上机间时,间时单位为分钟</param> PublicFunction GetResult(ByVal onlineTimeAsInteger)AsSingle '调用花费处置类算计收费方法 Return cashier.GetConsumeMoney(onlineTime) EndFunction '''<summary> '''受接卡型类的构造方法 '''</summary> '''<param name="cardType">卡型类,牢固用户或时临用户</param> PublicSubNew(ByVal cardType AsString) Dim basicBLLAsNewBasicDataManagerBLL'定义查询基本操作类 Dim basicEntityAsNewBasicDataEntity basicEntity = basicBLL.GetBasicData()'取获基本信息数据 'select语句停止判断择选传入的卡型类, '停止主动的建创花费型类 SelectCase cardType Case"牢固用户" cashier =NewRegularBLL(basicEntity.MoneyForRegularPerHour)'建创牢固用户收费型类 Case"时临用户" cashier =NewTemporaryBLL(basicEntity.MoneyForTemporaryHalfHour)'建创时临用户收费型类 Case Else cardType =Nothing EndSelect EndSub EndClass' CashContextBLL
最后客户端只要调用Context就能够晓得详细的花费情况啦,达到了很好的解耦果效
责职链模式
在这里用到的是对间时的判断
对于上机的生学,须要 有备准间时,少最上机间时,以及递增事件。
当在备准间时内是不收费,当在少最间时内时是按少最间时收费的。 当大于少最间时则按递增间时收费
责职链首先是定义一个类基,保障只有一个处置的求请口接
然后类子是详细的处置者类,处置它所责负的求请,可以问访它的后续者,如何可以处置该求请,就处置,否则就将该求请转发给后续的承继者。
类基中包括了具虚的承继者以及虚的处置方法。为了是让类子新重定义该算法。
上面看详细的实例
类基(抽象类)
'''<summary> '''上机间时处置类,处置上机间时用来算计上机花费 '''</summary> PublicMustInheritClassOnlineTimeHandlerBLL '''<summary> '''上机间时处置 '''</summary> Protected calculateAsOnlineTimeHandlerBLL ''' '''<param name="onlinetime">上机间时,以分钟为单位</param> PublicMustOverrideFunction Request(ByVal onlinetimeAsInteger)AsInteger '''<summary> '''置设calculate的继任者 '''</summary> '''<param name="calculate">上机间时处置</param> PublicOverridableSub SetCalculate(ByVal calculateAsOnlineTimeHandlerBLL) EndSub EndClass' OnlineTimeHandlerBLL
上面分别是承继者,处置者类
备准间时处置者:
有构造方法,初始化私有备准间时
'''<summary> '''上机备准间时处置 '''</summary> PublicClassPreparedTimeHandlerBLL Inherits Charge.ChargeBLL.OnlineTimeHandlerBLL '''<summary> '''备准间时 '''</summary> Private preparedtimeAsLong ''' '''<param name="onlinetime">上机间时,以分钟为单位</param> PublicOverridesFunction Request(ByVal onlinetimeAsInteger)AsInteger 'if函数判断上机的间时是不是在本处置范围内,不在转到下一个处置类,在返回0 If onlinetime <= preparedtimeThen Return 0'返回0 Else ReturnMe.calculate.Request(onlinetime) EndIf EndFunction '''<summary> '''置设calculate的继任者 '''</summary> '''<param name="calculate">上机间时处置</param> PublicOverridesSub SetCalculate(ByVal calculateAsOnlineTimeHandlerBLL) Me.calculate = calculate'置设calculate的继任者 EndSub '''<summary> '''初始化成员变量的构造方法 '''</summary> '''<param name="preparedtime">备准间时</param> PublicSubNew(ByVal preparedtime AsLong) Me.preparedtime = preparedtime'构造函数给私有间时 变量值赋 EndSub EndClass' PreparedTimeHandlerBLL
少最间时处置者:
也是有构造方法,初始化私有的少最间时
'''<summary> '''少最上机间时处置 '''</summary> PublicClassOnlineTimeLeastHandlerBLL Inherits Charge.ChargeBLL.OnlineTimeHandlerBLL '''<summary> '''少最上机间时 '''</summary> Private onlinetimeleastAsLong '''<summary> '''上机间时,以分钟为单位 '''</summary> '''<param name="onlinetime"></param> '''<returns></returns> '''<remarks></remarks> PublicOverridesFunction Request(ByVal onlinetimeAsInteger)AsInteger 'if语句判断上机间时是不是在少最间时内,若在则返回onlinetimeleast, 否则转到下一位处置 If onlinetime < onlinetimeleastThen ReturnCInt(onlinetimeleast)'小于少最间时,返回少最上机间时 Else '大于少最间时,转到下一位处置 ReturnMe.calculate.Request(onlinetime) EndIf EndFunction '''<summary> '''置设calculate的继任者 '''</summary> '''<param name="calculate">上机间时处置</param> PublicOverridesSub SetCalculate(ByVal calculateAsOnlineTimeHandlerBLL) Me.calculate = calculate'置设承继者 EndSub '''<summary> '''初始化少最上机间时构造方法 '''</summary> '''<param name="onlinetimeleast">少最上机间时</param> PublicSubNew(ByVal onlinetimeleast AsLong) Me.onlinetimeleast = onlinetimeleast'初始化少最上机间时 EndSub EndClass' OnlineTimeLeastHandlerBLL
最后是递增间时处置者类:
'''<summary> '''上机间时增加处置 '''</summary> PublicClassTimeIncreaseHandlerBLL Inherits Charge.ChargeBLL.OnlineTimeHandlerBLL '''<summary> '''上机增加间时 '''</summary> Private timeincreaseAsLong '''<summary> '''初始化上机增加间时的构造方法 '''</summary> '''<param name="timeincrease">上机增加间时</param> PublicSubNew(ByVal timeincrease AsLong) Me.timeincrease = timeincrease'初始化上机递增间时 EndSub ''' '''<param name="onlinetime">上机间时,以分钟为单位</param> PublicOverridesFunction Request(ByVal onlinetimeAsInteger)AsInteger Return onlinetime'返回上机间时 EndFunction '''<summary> '''置设calculate的继任者 '''</summary> '''<param name="calculate">上机间时处置</param> PublicOverridesSub SetCalculate(ByVal calculateAsOnlineTimeHandlerBLL) Me.calculate = calculate'置设承继者 EndSub EndClass' TimeIncreaseHandlerBLL
最后在调用之间置设好承继者的次序,以及调用的初始总者
'调用基本数据查询方法
basicEntity = basicdatamanagerbll.GetBasicData()
'建创备准间时,并付给备准间时
Dim prepareTimeAsNewPreparedTimeHandlerBLL(basicEntity.TimePrepared)
Dim listTimeAsNewOnlineTimeLeastHandlerBLL(basicEntity.TimeOnlineLeast)
'建创递增间时,并付给递增间时
Dim increaseTimeAsNewTimeIncreaseHandlerBLL(basicEntity.TimeIncrease)
'置设承继者
prepareTime.SetCalculate(listTime)'置设后承继者
listTime.SetCalculate(increaseTime)'置设后承继者
'prepareTime.Request()
onLineRecord.GetonTime =CDate(dtCard.Rows(0).Item("LoginTime").ToString)'取获花费间时
最后我们看下详细的
下机的方法
'''<summary> '''生学下机方法,通过某一卡号使某一生学下机,comment为常正下机还是制强下机 '''</summary> '''<param name="comment">是制强下机还是常正下机</param> '''<param name="card">充值卡信息</param> PublicFunction Logout(ByVal commentAsString,ByVal cardAsCardEntity)AsBoolean Dim dtCardAsNewDataTable Dim onIsFoundAsBoolean Dim cardIsFoundAsBoolean Dim basicEntityAsNewBasicDataEntity'定义基本数据体实类 Dim onLineRecordAsNewOnlineRecordEntity(NewStudentEntity(NewCardEntity)) Dim costTimeAsInteger Dim consumeAsSingle Dim balanceAsSingle Dim outIsFoundAsBoolean cardIsFound = cardmanagerbll.Validate(card)'调用查询卡号是不是存在方法 'if语句判断卡号是不是存在,true存在,false不存在 If cardIsFound =FalseThen '卡号不存在提示 ThrowNewException("此卡未注册,请新重输入卡号") Exit Function EndIf onIsFound = IsOnline(card)'调用查询是不是在线方法 'if语句判断该卡是不是在线 If onIsFound =FalseThen '该卡不在线,提示常异 ThrowNewException("该卡不在线,不能再次下机") Exit Function EndIf dtCard = onlinerecordManagerbll.QueryOnlineInfo(card)'根据卡号查询正在上机生学信息 '调用基本数据查询方法 basicEntity = basicdatamanagerbll.GetBasicData() '建创备准间时,并付给备准间时 Dim prepareTimeAsNewPreparedTimeHandlerBLL(basicEntity.TimePrepared) Dim listTimeAsNewOnlineTimeLeastHandlerBLL(basicEntity.TimeOnlineLeast) '建创递增间时,并付给递增间时 Dim increaseTimeAsNewTimeIncreaseHandlerBLL(basicEntity.TimeIncrease) '置设承继者 prepareTime.SetCalculate(listTime)'置设后承继者 listTime.SetCalculate(increaseTime)'置设后承继者 'prepareTime.Request() onLineRecord.GetonTime =CDate(dtCard.Rows(0).Item("LoginTime").ToString)'取获花费间时 onLineRecord.GetDownTime =CDate(TimeOfDay.ToString) costTime =CInt(DateDiff("n", Format(onLineRecord.GetonTime,"HH:mm:ss"), TimeOfDay))'转换取获花费间时 '调用初始接收者 costTime = prepareTime.Request(costTime) card.CardType = dtCard.Rows(0).Item(9).ToString '传入卡的型类 '调用策略模式的对象,传入用户型类 Dim conteshAsCashContextBLL =NewCashContextBLL(card.CardType) '调用策略模式的收费金额算法'插入的参数为责职链的返回值 consume = contesh.GetResult(costTime) balance =CSng(dtCard.Rows(0).Item("Balance").ToString) -CSng(consume)'算计余额 card.Balance = balance'新更余额 cardmanagerbll.Recharge(consume, card)'调用充值的方法新更余额 '体实值赋 onLineRecord.Comment = comment'制强下机或常正下机 onLineRecord.GetDownDate = Now onLineRecord.GetDownTime = Now onLineRecord.IsOnline = Trim("否") onLineRecord.IsCheckout ="否"'是不是结账 onLineRecord.ConsumeMoney = consume'花费金额 onLineRecord.Student.Card.CardNumber = card.CardNumber'下机卡号 '调用下机记载新更方法,if语句判断下机是不是功成,true 功成,false不功成过 outIsFound = onlinerecordManagerbll.GetDownRegist(card, onLineRecord) If outIsFound =TrueThen ReturnTrue Else ReturnFalse 'Throw New Exception("下机失败,请系联管理员") EndIf EndFunction
到此基本的次序就完结了,迎欢正指.
文章结束给大家分享下程序员的一些笑话语录:
AdobeFlash拖垮Windows拖垮IE!又拖垮Linux拖垮Ubuntu拖垮FirxEox!还拖垮BSD拖垮MacOS拖垮Safri!简直无所不拖!AdobeFlash滚出网路世界!不要以为市占有率高就可以持续出烂货产品!以后替代品多得是!