打折算法 Java_JAVA算法策略模式之商品打折 满x送x
场景:某超市收银台,营业员根据客户购买的商品和数量向客户收费.
问题:超市某段时间会有打折活动(例如打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相关推荐
- JAVA算法策略模式之商品打折 满x送x
场景:某超市收银台,营业员根据客户购买的商品和数量向客户收费. 问题:超市某段时间会有打折活动(例如打8折),满XXX元送XXX元活动,满XXX元送XXX积分活动等等. 算法类,可能是打折,满XX送X ...
- 策略模式--实现商场打折
前言: 上一篇博客中写明了简单工厂的引用,其实这篇博客和上一篇类似,是利用了策略加简单工厂的方法实现的.为了我们的重构可以运用上设计模式,本次运用了客户端的形式展现出来,具体请往下看: 策略模式: 顾 ...
- 算法的封装与切换——策略模式
本文转载自 :http://blog.csdn.net/lovelion/article/details/7818983 俗话说:条条大路通罗马.在很多情况下,实现某个目标的途径不止一条,例如我们在外 ...
- 六、策略模式—旅行的交通工具 #和设计模式一起旅行#
兵无常势,水无常形,能因敌变化而取胜者,谓之神! --<孙子兵法> 故事背景 旅行开始,我和设计模式mm要去的目的地很多,去往不同目的地可以选择的交通工具也是多样的,从北京到上海,我们可以 ...
- 设计模式 | 策略模式及典型应用
本文的主要内容: 介绍策略模式 示例 商场购物打折策略的实现 策略模式总结 源码分析策略模式的典型应用 Java Comparator 中的策略模式 Spring Resource 中的策略模式 Sp ...
- 研磨设计模式之 策略模式--转
http://www.uml.org.cn/sjms/201009092.asp 研磨设计模式之 策略模式 2010-09-09 作者:云飞龙行 来源:云飞龙行的blog 先感谢众多朋友的支持 ...
- Android使用的设计模式2——策略模式
今天讲解一下策略模式,策略模式也是很常用的设计模式,对多种算法或者数据结构选择使用的情况下,经常会使用策略模式来管理这些算法.下面会简单讲解一下策略模式的概念和基本实现.然后结合Android里面的实 ...
- 设计模式—策略模式(Strategy Pattern)
上午花了一个小时看了这篇关于策略模式的博文,例子生动.内容具体.值得一看(http://www.uml.org.cn) .转发这篇微博,只为互相学习. 策略模式(Strategy) 1 场景问题 1 ...
- JAVA行为模式——策略模式
文章目录 定义 实现 java代码实现 spring实现 总结 java中的应用 定义 针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响 ...
最新文章
- IOS开发笔记6-C语言基础复习
- Contest2071 - 湖南多校对抗赛(2015.03.28)
- 常见的上传绕过以及解析漏洞
- 【Python】可遍历的数据类型有哪些?
- docker mysql命令大全_Docker命令大全
- 值对于int32太大或太小怎么解决_数控车床加工螺纹时常见故障及解决方法
- Struts2的简单介绍
- 如何把测试库的统计信息导入到生产库
- 使用开源ASR框架在Mono和.NET C#中进行语音识别
- 推荐系统用户行为分析
- Zabbix之Python发送邮件
- Java中的private、protected、public和default的区别
- Winform 开发用户控件
- H5页面通过浏览器调用摄像头拍照
- win10分辨率设置正确但屏幕却被拉伸了,如何处理
- python自动化办公-提取excal表格某列数据
- java打字小游戏_java实现打字游戏小程序
- 一次大文件上传失败的排查
- 关于SQL数据表存储过程表名前缀换成dbo代码
- Eclipse背景颜色修改
热门文章
- 成为ui设计师要培训哪些技能呢?
- Vue.js 3.0 学习笔记(十一)Vue Router路由
- Android的数据结构与算法----ArrayList源码解析
- torchtext常用函数整理
- layer弹出层内点击确认提交数据并关闭弹出层
- Unraid下虚拟DSM7.1,并开启相册人脸识别
- 目标跟踪中cross correlation的总结与实现
- 【AI TIME】清华大学计算机系学术大佬的知识分享大会!
- 计算机软件水平高级考试内容,全国计算机软件专业资格和水平考试高级程序员级试题及答案.docx...
- SQLServer MDF文件和LDF文件区别