策略模式
来源:互联网 发布:telnet在端口连接失败 编辑:程序博客网 时间:2024/06/10 22:13
package com.design.utils;import org.junit.Test;public class TestStrategy {/* * 现金收取抽象类(Strategy类) */abstract class CashSuper {public abstract double acceptCash(double money);}/* * 正常收取子类(ConcreteStategy类) */class CashNormal extends CashSuper {@Overridepublic double acceptCash(double money) {return money;}}/* * 打折收取子类(ConcreteStategy类) */class CashRebate extends CashSuper {private double moneyRebate = 1;CashRebate(String moneyRebate) {this.moneyRebate = Double.parseDouble(moneyRebate);}@Overridepublic double acceptCash(double money) {return money * moneyRebate;}}/* * 返利收取子类(ConcreteStategy类) */class CashReturn extends CashSuper {private double moneyCondition = 0;private double moneyReturn = 0;CashReturn(String moneyCondition, String moneyReturn) {this.moneyCondition = Double.parseDouble(moneyCondition);this.moneyReturn = Double.parseDouble(moneyReturn);}@Overridepublic double acceptCash(double money) {double result = money;if (money >= moneyCondition) {result = money - Math.floor(money / moneyCondition) * moneyReturn;}return result;}}/* * CashContext类维护CashSuper对象的引用 */class CashContext{CashSuper cs = null;CashContext(String type){switch (type) {case "正常收费":cs = new CashNormal();break;case "打8折":cs = new CashRebate("0.8");break;case "满300减100":cs = new CashReturn("300", "100");break;}}public double GetResult(double money){return cs.acceptCash(money);}}/* * 测试 */@Testpublic void testStrategy(){//应收金额double price = 1222;//促销类型String type = "打8折";CashContext cc = new CashContext(type);System.out.println("实收金额:" + cc.GetResult(price));}}
策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要再不同时间应用不同的业务规则,就可以考虑策略模式处理这种变化的可能性。
阅读全文
0 0
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- Ubuntu 更新时区和时间
- switch置 default 用法
- jpg图片修改成png 运行异常 Error:Some file crunching
- javascript学习
- 避免启动Activity时出现白色闪屏问题
- 策略模式
- CentOS 7 安装配置分布式文件系统 FastDFS 5.0.5
- Salesforce去除邮箱验证
- 对携程的调研报告
- 会声会影X5/6/7无法注册解决(点击已经购买跳到购买网站)
- Java打飞机小游戏(附完整源码)
- Unity3d LitJson 的使用
- java 线程 CountDownLatch 同步工具
- 视线跟踪学习总结