【机房重构】策略模式之下机
来源:互联网 发布:长春办公软件培训 编辑:程序博客网 时间:2024/05/21 23:01
【引言】
机房收费系统的面向用户我分了两类:临时用户、固定用户。但是在下机计算他们消费的金额的时候,因为不同的类型,如果单个的计算增加了我们的代码量,而且系统不具有灵活性、可维护性,这时就引进了“策略模式”,设计模式大家族一大重要成员,给我带来了很多的便利呢,现在就有请策略模式登场。
【What】
定义了算法家族,分别封装起来,让它们之间可以相互替代,此模式让算法的变化,不会影响到使用算法的用户。
【Why】
这么大力的推荐它,当然它的用处不能小觑了,就来介绍一下他的优点吧!
1)所有它定义的这些算法完成的都是相同的工作,只是实现不同,它可以已相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合;
2}简化了单元测试,每个算法都有自己的类,可以通过自己的接口单独测试。通俗来说就是修改其中的一个类,也不会影响其他的类;
3)只要是在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性;
【How】
介绍了它这么多的优点,现在就看一下怎么运用他吧!
CashSuper类
public abstract class CashSuper //抽象算法类 { public abstract double GetConsumeMoney(double TimeSolt); }
CashContext类
public class CashContext //根据不同的收费策略,获得计算结果 { LoginEntity.Card card = new LoginEntity.Card(); CashSuper cs = null; //声明一个CashSuper类 public CashContext(string type,List<BasicInfoSet> Mylist)//调 { switch (type.Trim()) //选择每个卡的类型 { case "固定用户": CashVIP cs1 = new CashVIP(Convert.ToDouble(Mylist[0].Rate.Trim())); cs = cs1; break; case "临时用户": CashNormal cs0 = new CashNormal(Convert.ToDouble(Mylist[0].tmpRate.Trim())); cs = cs0; break; } }
临时用户CashNormal 类
public class CashNormal : CashSuper { private double moneyRebate = 1d; public CashNormal(double moneyRebate) { this.moneyRebate=moneyRebate; } public override double GetConsumeMoney(double TimeSolt) { return moneyRebate * (TimeSolt /60.0+1); }
固定用户 CashVIP类
public class CashVIP : CashSuper //固定用户 { private double moneyRebate = 2d; public CashVIP(double moneyRebate) { this.moneyRebate=moneyRebate; } public override double GetConsumeMoney(double TimeSolt) { return moneyRebate * (TimeSolt%60.0+1); } }
U层
CashContext CStext= new CashContext(type,Mylist); double Money= CStext.GetResult(TimeSolt);//消耗得金钱
阅读全文
1 0
- 【机房重构】策略模式之下机
- 【机房重构】--职责链模式+策略模式 实现下机
- 【个人机房重构】策略模式在下机
- 机房重构之下机
- 机房重构——下机(职责链模式+策略模式)
- 【机房重构】下机——职责链模式+策略模式(理论篇)
- 【机房重构】下机——职责链模式+策略模式(实践篇)
- 机房重构---下机
- 机房重构——观察者模式上下机
- 【机房重构】策略模式
- 【机房重构】——上下机之思考过程
- 机房收费系统重构之策略模式
- 机房重构下机(职责链+策略+反射+存储过程)
- 【机房重构】奋斗上下机
- 职责链模式应用——下机(机房重构知识点总结)
- 【机房重构】——观察者模式解决三种下机
- 机房重构——职责链模式搞定计算下机时间问题
- 机房重构——上下机算法巧用抽象模式
- python_创建xml文件
- 斐波那契数列
- 经典C/C++面试题
- 从Hadoop到Spark的架构实践
- 页面中产生小三角块的样式
- 【机房重构】策略模式之下机
- 【代码片-1】 WEB应用开发中的Servlet
- G
- fireworks 2017年山东省ACM省赛C题 SDUT 3895 (逆元求组合数)
- jni字符串乱码,异常,引用....
- 【Java集合】Java8 HashMap工作原理与实现
- Map集合实现的纯java购物车
- web用例设计及测试基本原则
- 如何让字典保持有序