场景:某超市收银台,营业员根据客户购买的商品和数量向客户收费.

问题:超市某段时间会有打折活动(例如打8折),满XXX元送XXX元活动,满XXX元送XXX积分活动等等.

算法类,可能是打折,满XX送XX等等

package com.hebo.test.designmode.strategy;public abstract class Strategy {//算法方法public abstract void AlgorithmInterface();
}

打折算法实现

package com.hebo.test.designmode.strategy;
/*** 模拟打折类* @author HeBo**/
public class ConcreteStrategyA extends Strategy {@Overridepublic void AlgorithmInterface() {System.out.println("打折算法实现..");}}

模拟满xx送xx元活动

package com.hebo.test.designmode.strategy;
/*** 模拟满xx送xx元活动* @author HeBo**/
public class ConcreteStrategyB extends Strategy {@Overridepublic void AlgorithmInterface() {System.out.println("满XX送XX元算法实现..");}}

模拟满XX元送XX积分

package com.hebo.test.designmode.strategy;
/*** 模拟满XX元送XX积分* @author HeBo**/
public class ConcreteStrategyC extends Strategy {@Overridepublic void AlgorithmInterface() {System.out.println("满XX元送XX积分算法实现..");}}

上下文

package com.hebo.test.designmode.strategy;public class Context {Strategy strategy;public Context(String type){if(type.equals("打折")){strategy = new ConcreteStrategyA();return;}if(type.equals("满就送")){strategy = new ConcreteStrategyB();return;}if(type.equals("送积分")){strategy = new ConcreteStrategyC();return;}}//不使用工厂模式的构造函数public Context(Strategy strategy){this.strategy = strategy;}//上下文接口public void ContextInterface(){strategy.AlgorithmInterface();}
}

测试类

package com.hebo.test.designmode.strategy;
/*** 模拟收银台* @author HeBo**/
public class Test {static Context context;public static void main(String[] args) {context = new Context("打折");context.ContextInterface();context = new Context("满就送");context.ContextInterface();context = new Context("送积分");context.ContextInterface();/*Context不使用工厂模式的测试代码* context = new Context(new ConcreteStrategyA());context.ContextInterface();context = new Context(new ConcreteStrategyB());context.ContextInterface();context = new Context(new ConcreteStrategyC());context.ContextInterface();*/}}

总结:策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合。

策略模式的Strategy类为Context定义了一系列的可供重用的算法和行为。另外一个优点是简化了单元测试,每个算法都有自己的类,可以通过自己单独接口进行测试。

JAVA算法策略模式之商品打折 满x送x相关推荐

  1. 打折算法 Java_JAVA算法策略模式之商品打折 满x送x

    场景:某超市收银台,营业员根据客户购买的商品和数量向客户收费. 问题:超市某段时间会有打折活动(例如打8折),满XXX元送XXX元活动,满XXX元送XXX积分活动等等. 算法类,可能是打折,满XX送X ...

  2. Java使用策略模式替换掉 if else

    Java使用策略模式替换掉 if else 我们的代码中常常大量的使用 if else ,如果条件在不断的增加,我们就需要继续在后面增加if else,代码就会越来越臃肿,可读性差,后期非常不好维护, ...

  3. Java设计模式-策略模式作业

    Java设计模式-策略模式作业,所有类和接口均在一个package内 文章目录 前言 一.作业内容 二.具体实现 1.类图 2.Strategy接口 3.PreCopyStrategy类 4.Post ...

  4. Java设计模式——策略模式(解决满屏的if/else)

    一.业务场景 项目需要对接支付系统,根据不同客户类型会有不同的支付方式,比如:支付宝.微信.银联.云闪付等等其他第三方支付平台,这个时候策略模式就大展身手了. 传统的if/else/switch 等等 ...

  5. 策略模式--实现商场打折

    前言: 上一篇博客中写明了简单工厂的引用,其实这篇博客和上一篇类似,是利用了策略加简单工厂的方法实现的.为了我们的重构可以运用上设计模式,本次运用了客户端的形式展现出来,具体请往下看: 策略模式: 顾 ...

  6. java设计模式---策略模式

    1,什么是策略模式? 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 2,策略模式有什么好处? 策略模式的好处在于你可以动态的改变对象 ...

  7. JAVA设计模式-策略模式

    1.1 需求背景 Background:M公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票打折方式,具体打折方案如下: (1)学生凭学生证可享受票价8折优惠: (2 ...

  8. java计数器策略模式_策略模式与外观模式 | 学步园

    1.策略 :定义不同的 2. 例子:随机生成宠物,并统计各种宠物生成数量. a) 抽象类:PetCreator,用于随机生成宠物. package context; import java.util. ...

  9. Java设计模式----策略模式(Strategy)

    1.  策略模式: 策略模式,也称为政策模式,定义如下: 定义一组算法,将每个算法都封装起来,使他们可以相互转化 2.  策略模式的原理是面向对象的继承和多态.策略模式的3个角色 a. Strateg ...

最新文章

  1. java jersey使用总结_jersey使用指南
  2. JS的prototype和__proto__
  3. 准备您的虚拟桌面--WinXp模板
  4. PyCharm中控制台输出日志分层级分颜色显示
  5. bpnn matlab工具箱,bpnn——matlab工具箱-归一化函数 premnmx、tramnmx、postmnmx、mapminmax...
  6. 短期主义和长期主义的思考
  7. 处理JS异常的一个想法
  8. TensorFlow:实战Google深度学习框架(五)图像识别与卷积神经网络
  9. linux高亮查找关键字
  10. 信息安全工程师考试大纲
  11. BZOJ3884 上帝与集合的正确用法 【欧拉定理】
  12. 基于FTP4J组件的FTP操作客户端
  13. paip.php调试imcompatible debug sever version..with zend debugger
  14. 张宇1000题高等数学 第十、十一、十二章 一元函数积分学的应用——几何应用、积分等式与积分不等式、物理应用
  15. 用计算机专业怼人,专业示范,教你如何用所学专业知识“怼人”
  16. rk3568和rk3399性能对比 rk3568和rk3399区别
  17. 【Linux】解决笔记本合盖子休眠的问题
  18. bzoj3811 玛里苟斯
  19. 【转】Lwip 断连,连接几次后不通及偶尔不通的问题.
  20. oracle闪回区满了,一次快速闪回区满导致数据库不能启动的解决过程

热门文章

  1. DAC124S085芯片的使用
  2. 2023京东全球科技探索者大会暨京东云峰会,7月13日见!
  3. 新的勒索软件在第一个月就有十名受害者
  4. 不可忽视的浪潮云平台,正蓄势待发
  5. java 创建临时表 oracle_在ORACLE存储过程中创建临时表
  6. b站营销成功因素浅分析
  7. 投资人读一份BP只用3分44秒,你还敢不认真准备吗?
  8. 遍历容量(各态历经容量)
  9. pheatmap绘制热力图
  10. WIFI中的频段、信道、信道带宽