一、刚开始使用职责链模式来实现下机时计算消费金额。

1、父类:CountCashManagerBLL

 abstract class CountCashManagerBLL{protected string name;//管理者的上机protected CountCashManagerBLL superior;public CountCashManagerBLL(string name){this.name = name;}//设置继任者,即所有计算金额的父类public void SetSuperior(CountCashManagerBLL superior){this.superior = superior;}//处理请求的抽象方法,即下机时的收费金额public abstract OnOffLineEntity GetCash(OnOffLineEntity offline);}

2、子类:FirstCountCashBLL

  //计算第一步时间间隔所花费的金额public class FirstCountCashBLL : CountCashManagerBLL{public FirstCountCashBLL(string name): base(name){ }public override OnOffLineEntity GetCash(OnOffLineEntity offline){  List<BasicDataEntity> List = new List<BasicDataEntity>();List = FactoryRoom.CreateBasicData().InquireBasicData();//如果上机时间 <=准备时间if (int.Parse(offline.consumeTime)<=int.Parse(List[0].readyTime)){offline.consume = 0;}else{//传给下一级superior.GetCash(offline);}return offline;}}

3、子类:SecondCountCashBLL

 //计算未达到单位递增时间的消费金额,大于准备时间public class SecondCountCashBLL:CountCashManagerBLL{public override OnOffLineEntity GetCash(OnOffLineEntity offline){CardEntity cardinfo=new CardEntity();List<BasicDataEntity> List=FactoryRoom.CreateBasicData().InquireBasicData();if (int.Parse(offline.consumeTime) < int.Parse(List[0].increaseTime)){if (cardinfo.cardType.Trim()=="VIP用户"){offline.consume = int.Parse(List[0].VIPRate);  //VIP用户消费金额}else{offline.consume = int.Parse(List[0].generalRate); //一般用户消费金额}}else{superior.GetCash(offline);}return offline;}}

4、子类:ThirdCountCashBLL

//计算已经达到单位上机时间的消费金额public class ThirdCountCashBLL:CountCashManagerBLL{public override OnOffLineEntity GetCash(OnOffLineEntity offline){List<BasicDataEntity> List = FactoryRoom.CreateBasicData().InquireBasicData();double consumeTime= Convert.ToDouble(offline.consumeTime);   //消费时间(将string类型转换为double类型)double increaseTime = Convert.ToDouble(List[0].increaseTime);//单位递增时间       int VIPRate=int.Parse(List[0].VIPRate);           //每单位时间VIP费用int generalRate=int.Parse(List[0].generalRate);   //每单位时间一般用户费用double choseint = Math.Ceiling(consumeTime / increaseTime); //取整(向上取整。如54除以5 等于 6)OnOffLineEntity cardinfo = new OnOffLineEntity();if (cardinfo.cardType.Trim()=="VIP用户"){offline.consume = Convert.ToDecimal(VIPRate * choseint);  //将double类型转换为decimal                             }else //如果是一般用户{offline.consume = Convert.ToDecimal(generalRate * choseint);    }return offline;} }

感觉职责链虽然在一定程度上解耦了,但还是不够,于是加上了策略模式。职责链:负责算出有多少个单位时间。策略模式:对一般用户和VIP用户进行分情况讨论。代码如下。

职责链:

FirstCountCashBLl

    //计算第一步时间间隔所花费的时间public class FirstCountCashBLL : CountCashManagerBLL{public override OnOffLineEntity GetCash(OnOffLineEntity offline){  List<BasicDataEntity> List = new List<BasicDataEntity>();List = FactoryRoom.CreateBasicData().InquireBasicData();double consumeTime = Convert.ToDouble(offline.consumeTime);   //消费时间(将string类型转换为double类型//如果上机时间 <=准备时间if (consumeTime <= int.Parse(List[0].readyTime)){consumeTime = 0;offline.consumeTime = consumeTime.ToString();offline.choseint = 0;}else{//传给下一级superior.GetCash(offline);}return offline;}}

SecondCountCashBLL:

 //计算未达到单位递增时间的消费金额,大于准备时间public class SecondCountCashBLL:CountCashManagerBLL{public override OnOffLineEntity GetCash(OnOffLineEntity offline){CardEntity cardinfo=new CardEntity();List<BasicDataEntity> List=FactoryRoom.CreateBasicData().InquireBasicData();double consumeTime = Convert.ToDouble(offline.consumeTime);double increaseTime = Convert.ToDouble(List[0].increaseTime);if (consumeTime < increaseTime){         consumeTime = increaseTime;offline.consumeTime = consumeTime.ToString();offline.choseint = 1;}else{superior.GetCash(offline);}return offline;}} //计算未达到单位递增时间的消费金额,大于准备时间public class SecondCountCashBLL:CountCashManagerBLL{public override OnOffLineEntity GetCash(OnOffLineEntity offline){CardEntity cardinfo=new CardEntity();List<BasicDataEntity> List=FactoryRoom.CreateBasicData().InquireBasicData();double consumeTime = Convert.ToDouble(offline.consumeTime);double increaseTime = Convert.ToDouble(List[0].increaseTime);if (consumeTime < increaseTime){         consumeTime = increaseTime;offline.consumeTime = consumeTime.ToString();offline.choseint = 1;}else{superior.GetCash(offline);}return offline;}}

ThirdCountCashBLL:

 public class ThirdCountCashBLL:CountCashManagerBLL{public override OnOffLineEntity GetCash(OnOffLineEntity offline){List<BasicDataEntity> List = FactoryRoom.CreateBasicData().InquireBasicData();double consumeTime= Convert.ToDouble(offline.consumeTime);   //消费时间(将string类型转换为double类型)double increaseTime = Convert.ToDouble(List[0].increaseTime);//单位递增时间       int VIPRate=int.Parse(List[0].VIPRate);           //每单位时间VIP费用int generalRate=int.Parse(List[0].generalRate);   //每单位时间一般用户费用double choseint = Math.Ceiling(consumeTime / increaseTime); //(有多少个单位消费时间)取整(向上取整。如54除以10 等于 6)offline.choseint=choseint;return offline;} }

策略模式:

CashSuperBLL:

public abstract class CashSuperBLL{public FirstCountCashBLL Bfirst = new FirstCountCashBLL();public SecondCountCashBLL Bsecond = new SecondCountCashBLL();public ThirdCountCashBLL Bthird = new ThirdCountCashBLL();public abstract OnOffLineEntity acceptCash(OnOffLineEntity offline);}

CashContextBLL:

   public class CashContextBLL{CashSuperBLL cs = null;public CashContextBLL(OnOffLineEntity offline){switch (offline.cardType){case "一般用户":cs = new GeneralCashBLL();break;case "VIP用户":cs = new VIPCashBLL();break;}}//最后外观层只需要调用这个方法就行。public OnOffLineEntity getConsumeCash(OnOffLineEntity offline){return cs.acceptCash(offline);}}

GeneralCashBLL:

 public class GeneralCashBLL:CashSuperBLL{public override OnOffLineEntity acceptCash(OnOffLineEntity offline){offline = Bfirst.GetCash(offline);Bfirst.SetSuperior(Bsecond);Bsecond.SetSuperior(Bthird);List<BasicDataEntity> List = FactoryRoom.CreateBasicData().InquireBasicData();int generalRate = int.Parse(List[0].generalRate);           //每单位时间一般用户费用offline.consume = Convert.ToDecimal(generalRate * offline.choseint);return offline;}}

VIPCashBLL:

 public class VIPCashBLL:CashSuperBLL{public override OnOffLineEntity acceptCash(Entity.OnOffLineEntity offline){List<BasicDataEntity> List = FactoryRoom.CreateBasicData().InquireBasicData();int VIPRate = int.Parse(List[0].VIPRate);           //每单位时间VIP费用offline.consume = Convert.ToDecimal(VIPRate * offline.choseint);return offline;}}

【机房合作】策略+职责链在下机中的应用相关推荐

  1. java 职责链模式_Java中的责任链模式

    java 职责链模式 当应有几个处理器来执行某项操作并为这些处理器定义特定顺序时,就需要采用责任链设计模式. 在运行时处理器顺序的可变性也很重要.模式的UML表示如下: 处理程序定义处理器对象的一般结 ...

  2. 十八、职责链模式-推卸责任,不关我的事,我不管!#和设计模式一起旅行#

    不在其位,不谋其政! –出自<论语·泰伯> 故事背景 在现实世界中,有很多情况下会遇到一些推卸责任的场景,比如要办理一件事的时候,被告诉你要去做个做这个事情,但是去了这个地方,确告诉要到另 ...

  3. 请求的链式处理——职责链模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/7420891 "一对二","过","过&q ...

  4. 职责链模式应用——下机(机房重构知识点总结)

    下机涉及两个方面,消费时间和消费金额. 对消费时间的处理用的是职责链模式,感觉这个模式用的非常妙,參考的师哥的博客:<机房收费下机中用到的策略与职责链解析>:消费金额的处理用策略模式.针对 ...

  5. 策略模式和职责链模式在CMS中的应用

    最近在做一个轻量级CMS供客户站点使用. 根据客户的需求,需要以静态页方式提供用户浏览的页面,同时还要保留一个本份,支持"双远程"发布,即在一台远程发布服务器上保留存根,最终页面保 ...

  6. 【机房重构个人版】上下机与职责链

    刚开始做上下机的时候,感觉上机还可以,下机好麻烦,涉及到各种计算~~~都说万事开头难,那就硬着头皮干吧. 首先应该缕缕上下机的思路.如下图所示: 个人感觉下机的难点有两个:一是职责链模式的使用,二是计 ...

  7. Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)

    Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...

  8. 观察者模式与职责链模式的相同和不同_GOF设计模式(策略模式,职责链模式)...

    策略模式(整体的替换算法) 基本介绍:对象具备某个行为,但是在不同的场景中,该行为有不同的实现算法.(定义一组算法,将每个算法都封装起来,并且使他们之间可以互换).多用于封装算法 类图 角色: 上下文 ...

  9. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

最新文章

  1. oracle adg的特点是什么,Oracle12c ADG新特性
  2. (旧)走遍美国——(三、文化1)
  3. 双y轴设置 颜色_项目实战:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、实时下位机数据)...
  4. 《推荐系统笔记(八)》GBDT和XgBoost的原理(内含详细数学推导)
  5. Java开发笔记(一百四十四)实现FXML对应的控制器
  6. 快速稳定下载googledrive文件
  7. android webview权限申请_android WebView全面总结
  8. Abaqus动力学分析基础
  9. Class 2 搭建简历网站
  10. ps界面为啥突然变大了_PS教程丨皮肤美白修饰
  11. 浏览器被劫持打开变成hao123 和 vs CODE编译器无法打开浏览器问题
  12. 计算机老师开学第一堂课,开学第一堂课作文(精选8篇)
  13. 高新技术企业认定申请通过后补贴
  14. 东南大学信息科学工程学院在计算机,【东南大学计算机科学与工程学院】疑问咨询贴...
  15. 第004篇:ArcGIS中制作一张图中有多个图框(一幅多图)的方法
  16. 如何用iDesktop快速制作一幅研究区概况图
  17. 华硕RT-N13U B1路由器OpenWrt固件操作备忘录(一)--初始篇
  18. html常用标签大全--附使用方法
  19. 小心你家的WiFi,别被隔壁老王偷窥了......
  20. 前端新玩具——webGL简介

热门文章

  1. mysql创建用户语法_MySQL创建用户
  2. flex 联机游戏开发 - 四国军棋游戏:(三) 核心类设计
  3. 顾客使用天猫优惠券预测分析
  4. PHP转换年月日日期格式为时间戳
  5. 一声令下即可关灯,再也不用在寒冬深夜离开被窝~
  6. Excel数据的分类汇总
  7. python分配使利润最高_求解最大利润算法
  8. “玉兔”仅140公斤重 六轮驱动车轮轻过婴儿车
  9. 使用supervisor管理laravel队列 - 配置文件supervisord.conf
  10. 物通博联工业网关串口接法|端子口接线方式