1.准备工作,创建一个SpringBoot项目

2.用于判定使用哪个策略的类

public class CashContext {

private CashSupercs acceptCash;

/**

* 使用构造方法来进行选择具体的收费策略

*

* @param cashSuper

*/

public CashContext(CashSuper cashSuper) {

this.cs = cashSuper;

}

public Double getResult(Double money){

return cs.acceptCash(money);

}

}

3.支付方法的抽象类

public abstract class CashSuper {

/**

* 接收现金支付的方法

* @param money

* @return

*/

public abstract Double acceptCash(Double money);

}

4.正常收费

public class CashNormalextends extends CashSuper {

/**

* 正常收费,即是不参与任何打折活动,故此直接返回当前收费现金

*

* @param money

* @return

*/

@Override

public Double acceptCash(Double money) {

return money;

}

}

5.打折收费的情况

public class CashRebateextends extends CashSuper {

private DoublemoneyRebate =1D;

/**

* 使用构造器来进行初始化打折率,构造方法的好处就是当初始化这个类的时候就会初始化好当前这个类的字段

*

* @param moneyRebate

*/

public CashRebate(String moneyRebate) {

this.moneyRebate = Double.parseDouble(moneyRebate);

}

@Override

public Double acceptCash(Double money) {

return money *moneyRebate;

}

}

6.满减活动

public class CashReturnextends extends CashSuper {

private DoublemoneyCondition =0.0D;//返利的条件

private DoublemoneyReturn =0.0D;//满足多少条件之后返利多少

/**

* 使用构造方法来初始化返利的条件和达到返利条件之后的返利钱数

*

* @param moneyCondition

* @param moneyReturn

*/

public CashReturn(String moneyCondition, String moneyReturn) {

this.moneyCondition = Double.parseDouble(moneyCondition);

this.moneyReturn = Double.parseDouble(moneyReturn);

}

/**

* 判断如果当前的钱数已经大于需要返利的钱数,那就使用Math.floor方法格式化小数点后的小数,是一个取整数的方法

*

* @param money

* @return

*/

@Override

public Double acceptCash(Double money) {

Double result = money;

if (money >=moneyCondition) {

result = money - Math.floor(money /moneyCondition) *moneyReturn;

}

return result;

}

}

7.controller层

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

@Controller

public class StrategyController{

/**

* 使用策略模式来执行操作,是用工厂设计模式的缺陷就是算法会跟客户端的交互耦合在一起了,使用策略模式的好处就是相当于在工厂模式的外围再增加了一层保护套

*

* @param model

* @param price

* @param number

* @param type

* @return

*/

@RequestMapping("strategy")

public String strategy(Model model, Double price, Double number, String type) {

Double currentprice = price * number;

CashContext cc =null ;

switch (type){

case "正常收费" :

cc =new CashContext(new CashNormal());

break;

case "满300返100" :

cc =new CashContext(new CashReturn("300","100"));

break;

case "打8折" :

cc =new CashContext(new CashRebate("0.8"));

break;

}

Double totalPrice =0D;

totalPrice = cc.getResult(currentprice);

model.addAttribute("result", totalPrice);

model.addAttribute("detail","单价:" + price +"\n" +"数量:" + number +"\n" +"应付:"

+ currentprice +"\n" +"实付" + totalPrice);

return "login";

}

}

8.前台页面

商场收银台

单价:

数量:

正常收费

打8折

满300返100

${(detail)!""}

总计:

$(function () {

$("#reset").click(){

$("input").val("");

}

});

9.总体目录结构 如果在目录结构当中找到上面没有的那就是我用于测试的而已,并不参与实际的业务逻辑

本文同步分享在 博客“cwl_java”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

java多个收银台收银_Java策略模式设计(简易收银台SpringBoot)相关推荐

  1. python打折简单程序每满_[Python设计模式] 第2章 商场收银软件——策略模式

    题目 设计一个控制台程序, 模拟商场收银软件,根据客户购买商品的单价和数量,计算总价. 基础版本 price = float(input("输入商品单价:")) number = ...

  2. java课设超市收银系统_基于jsp的超市收银系统-JavaEE实现超市收银系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的超市收银系统, 该项目可用各类java课程设计大作业中, 超市收银系统的系统架构分为前后台两部分, 最终实现在线上 ...

  3. Java 8中使用Lambda表达式的策略模式

    策略模式是" 设计模式:可重用对象的元素"书中的模式之一 . 本书所述的策略模式的意图是: 定义一系列算法,封装每个算法,并使它们可互换. 策略使算法独立于使用该算法的客户端而变化 ...

  4. 使用策略模式设计一个动作冒险类游戏

    使用策略模式设计一个动作冒险类游戏 背景 ClassDiagram图 部分代码展示 Client运行展示 背景 动作冒险游戏: 游戏中有一系列角色(Character),包括国王(King).皇后(Q ...

  5. 收银怎样挂单和取单_6、银豹收银台-收银/挂单取单/货流/交接班

    温馨提示:以下是通过PC端收银台操作. 1.开始收银 右侧商品区域>选择商品分类>选中商品 点击商品文字部分(白色区域),该商品将直接添加到收银区域,多次点击同一商品则增加数量. 点击某个 ...

  6. java课设超市收银系统_《超市收银系统java课程设计》.doc

    目录 第1章 需求分析1 1.1 超市收银系统需求分析1 1.2 类的说明1 第2章 系统总体设计2 2.1 总体设计2 2.2 设计数据管理子系统3 2.3 设计人机交互子系统5 第3章 详细设计7 ...

  7. JAVA作业——KFC模拟收银系统

    一.题目分析 同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,并合理使用C++或Java或Python,结合设计模式(2种以上),至少实现系统的以下功能 ...

  8. java模拟实现KFC收银系统

    同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算 ...

  9. JAVA肯德基快餐店收银系统

    题目: 同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)至少实现系统的以下功能: 1.正 ...

  10. 策略模式java 用例_java策略模式简单用例

    运用java策略模式一个小程序 /** * */ package Strategy; import java.util.Arrays; /** * @author HuangRong * @Funti ...

最新文章

  1. YOLOV4各个创新功能模块技术分析(二)
  2. 试编写一个将双向循环链表逆置的算法_循环双向链表在电路计算中的应用
  3. 【文本信息抽取与结构化】深入了解关系抽取你需要知道的东西
  4. php 面向过程分页,无JS,完全php面向过程,数据分页
  5. ---WebCam网络摄像头7 cmos--yuv rgb , Format............:V4L2_PIX_FMT_YUYV
  6. vaOJ10369 - Arctic Network
  7. 新书进展和我的决定。
  8. python sqlite cursor
  9. spring整合ehcache
  10. 微信机器人开发SDK使用教程--删除朋友圈
  11. 液晶手写板原理拆解_汽车抬头显示HUD的拆解
  12. react-native 开发在Android模拟器上运行
  13. Python之计算机算法基础总结(借鉴、整理)、排序算法、查找算法
  14. [推广]AboutCG Python商业教程发布
  15. WHQL认证最新申请流程
  16. ArcGIS之创建企业级地理数据库(Oracle)
  17. SLAM优秀开源工程大汇总
  18. 国科大计算机体系结构习题整理
  19. nuxt / ssr简介以及要不要使用服务端渲染(SSR)?
  20. 第三方登录之QQ登录集成(二)

热门文章

  1. React:react-router
  2. linux 的 swapper 进程不能sleep,深入理解perf报告中的swapper进程
  3. SecureRandom生成随机数
  4. .net模式子窗口传值给父窗口
  5. 深度学习笔记_各种神经网络结构对比(ImageNet竞赛中:AlexNet/VGG/GoogleNet/ResNet/SENet)
  6. 论文笔记_SLAM_Visual SLAM for Driverless Cars: A Brief Survey
  7. 【图论】拉普拉斯矩阵(Laplacian matrix)
  8. SVN“Previous operation has not finished; run 'cleanup' if it was interrupted”错误修复方法
  9. 目标检测的模型集成方法及实验
  10. 关于删库 恢复 (慎重使用,未亲测)