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

问题:超市某段时间会有打折活动(例如打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 {

@Override

public void AlgorithmInterface() {

System.out.println("打折算法实现..");

}

}模拟满xx送xx元活动

package com.hebo.test.designmode.strategy;

/**

* 模拟满xx送xx元活动

* @author HeBo

*

*/

public class ConcreteStrategyB extends Strategy {

@Override

public void AlgorithmInterface() {

System.out.println("满XX送XX元算法实现..");

}

}模拟满XX元送XX积分

package com.hebo.test.designmode.strategy;

/**

* 模拟满XX元送XX积分

* @author HeBo

*

*/

public class ConcreteStrategyC extends Strategy {

@Override

public 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_JAVA算法策略模式之商品打折 满x送x相关推荐

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

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

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

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

  3. 算法的封装与切换——策略模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/7818983 俗话说:条条大路通罗马.在很多情况下,实现某个目标的途径不止一条,例如我们在外 ...

  4. 六、策略模式—旅行的交通工具 #和设计模式一起旅行#

    兵无常势,水无常形,能因敌变化而取胜者,谓之神! --<孙子兵法> 故事背景 旅行开始,我和设计模式mm要去的目的地很多,去往不同目的地可以选择的交通工具也是多样的,从北京到上海,我们可以 ...

  5. 设计模式 | 策略模式及典型应用

    本文的主要内容: 介绍策略模式 示例 商场购物打折策略的实现 策略模式总结 源码分析策略模式的典型应用 Java Comparator 中的策略模式 Spring Resource 中的策略模式 Sp ...

  6. 研磨设计模式之 策略模式--转

    http://www.uml.org.cn/sjms/201009092.asp 研磨设计模式之 策略模式   2010-09-09 作者:云飞龙行 来源:云飞龙行的blog   先感谢众多朋友的支持 ...

  7. Android使用的设计模式2——策略模式

    今天讲解一下策略模式,策略模式也是很常用的设计模式,对多种算法或者数据结构选择使用的情况下,经常会使用策略模式来管理这些算法.下面会简单讲解一下策略模式的概念和基本实现.然后结合Android里面的实 ...

  8. 设计模式—策略模式(Strategy Pattern)

    上午花了一个小时看了这篇关于策略模式的博文,例子生动.内容具体.值得一看(http://www.uml.org.cn) .转发这篇微博,只为互相学习. 策略模式(Strategy) 1  场景问题 1 ...

  9. JAVA行为模式——策略模式

    文章目录 定义 实现 java代码实现 spring实现 总结 java中的应用 定义 针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响 ...

最新文章

  1. IOS开发笔记6-C语言基础复习
  2. Contest2071 - 湖南多校对抗赛(2015.03.28)
  3. 常见的上传绕过以及解析漏洞
  4. 【Python】可遍历的数据类型有哪些?
  5. docker mysql命令大全_Docker命令大全
  6. 值对于int32太大或太小怎么解决_数控车床加工螺纹时常见故障及解决方法
  7. Struts2的简单介绍
  8. 如何把测试库的统计信息导入到生产库
  9. 使用开源ASR框架在Mono和.NET C#中进行语音识别
  10. 推荐系统用户行为分析
  11. Zabbix之Python发送邮件
  12. Java中的private、protected、public和default的区别
  13. Winform 开发用户控件
  14. H5页面通过浏览器调用摄像头拍照
  15. win10分辨率设置正确但屏幕却被拉伸了,如何处理
  16. python自动化办公-提取excal表格某列数据
  17. java打字小游戏_java实现打字游戏小程序
  18. 一次大文件上传失败的排查
  19. 关于SQL数据表存储过程表名前缀换成dbo代码
  20. Eclipse背景颜色修改

热门文章

  1. 成为ui设计师要培训哪些技能呢?
  2. Vue.js 3.0 学习笔记(十一)Vue Router路由
  3. Android的数据结构与算法----ArrayList源码解析
  4. torchtext常用函数整理
  5. layer弹出层内点击确认提交数据并关闭弹出层
  6. Unraid下虚拟DSM7.1,并开启相册人脸识别
  7. 目标跟踪中cross correlation的总结与实现
  8. 【AI TIME】清华大学计算机系学术大佬的知识分享大会!
  9. 计算机软件水平高级考试内容,全国计算机软件专业资格和水平考试高级程序员级试题及答案.docx...
  10. SQLServer MDF文件和LDF文件区别