策略模式类图与代码

某大型购物中心欲开发一套收银软件,要求其能够支持购物中心在不同时期推出的各种促销活动,如打折、返利(例如,满300返100),等等。现采用策略(Strategy)模式实现该要求,得到如图7.13 所示的类图。

【Java 代码】

import java.util.*;
enum TYPE { NORMAL,CASH_DISCOUNT,CASH_RETURN};
interface Cashsuper {public double acceptCash(double money);
}
class CashNormal implements CashSuper{// 正常收费子类public double accptCash(double money){return money;}
}
class CashDiscount implements Cashsuper {private double moneyDiscount;    //折扣率public CashDiscount(double moneyDiscount){this moneyDiscount = moneyDiscount;}public double acceptCash(double money){return money* moneyDiscount;}
}
class CashReturn implements Cashsuper {  //满额返利private double moneyCondition;private double moneyReturn;public CashReturn(double moneyCondition, double moneyReturn){this.moneycondition =moneyCondition;//满额数额this.moneyReturn =moneyReturn;//返利数额}public double acceptCash(double money){double result = money;if (money >= moneyCondition )result=money-Math.floor(money/moneyCondition )* moneyReturn;return result;}
}
class CashContext_{private Cashsuper cs;private TYPE t;public CashContext(TYPE t){switch(t){case NORMAL;// 正常收费cs= new CashNormal();break;case CASH RETURN;//满300返100cs = new CashReturn(300,100);break;case CASH_ DISCOUNT;//打8折cs =new CashDiscount(0.8);break;}}public double GetResult(double money){return cs.acceptCash(money);}//此处略去main()函数
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/620587.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3+高德地图(或echarts)+turfjs实现等压线,色斑图(用于显示气象,环境等地图场景)

首先是turf.js(英文官网),也有中文网不过也就目录翻译了一下. 高德官网自行获得key echarts官网 使用turf的isobands api实现. 数据: 需要准备geojson格式经纬度信息业务值(比如温度,高度,光照只要是number值什么数据都可以) 国内各地区geojson数据点这里获得 参考的是这位大佬…

每日两题 / 3. 无重复字符的最长子串 84. 柱状图中最大的矩形(LeetCode热题100)

3. 无重复字符的最长子串 - 力扣(LeetCode) 双指针,l和r从字符串最左边开始,保存l和r之间的所有字符 移动r,若新加入的字符和已有字符重复,则不断移动l,直到l和r之间不出现重复字符 注意&#…

功能测试_验证新浪邮箱登录的正确性

案例:验证验证新浪邮箱登录的正确性 功能测试_等价类设计用例: 步骤: 1:明确需求:邮箱能否登录 2:划分等价类:有效等价类、有效取值、无效等价类、无效取值 3:提取数据编写用例:用例编号、…

SpringBoot自定义application配置文件及使用

文章目录 前言一、application配置文件是什么?二、使用步骤1.添加配置数据 总结 前言 提示:这里可以添加本文要记录的大概内容: Spring Boot的application配置文件 提示:以下是本篇文章正文内容,下面案例可供参考 一…

如何在Linux系统部署Tale并实现无公网IP远程管理内网博客网站

文章目录 前言1. Tale网站搭建1.1 检查本地环境1.2 部署Tale个人博客系统1.3 启动Tale服务1.4 访问博客地址 2. Linux安装Cpolar内网穿透3. 创建Tale博客公网地址4. 使用公网地址访问Tale 前言 今天给大家带来一款基于 Java 语言的轻量级博客开源项目——Tale,Tale…

如何在面试中胜出?接口自动化面试题安排上!

一、平常用什么工具测接口? 主流接口测试工具:Jmeter、PostMan、RESTClient、Fiddler、Requests库,不同测试环境不同需求,选择不同工具。 1).Jmeter:Java开发一款开源免费工具,适合接口功能测试、接口自动化测试、…

app证书在设置在哪

根据近日工业和信息化部发布的《工业和信息化部关于开展移动互联网应用程序备案工作的通知》,相信不少要进行IOS平台App备案的朋友遇到了一个问题,就是apple不提供云管理式证书的下载,也就无法获取公钥及证书SHA-1指纹。 已经上架的应用不想重…

如何实现对空调状态监测的监控

随着科技的飞速发展和人们生活水平的持续提高,空调已经成为现代家庭和办公环境中不可或缺的一部分。然而,传统的空调使用方式往往存在能效低下、操作不便等问题。为了解决这些问题,智能空调控制器应运而生,它不仅能实现对空调状态…

OpenHarmony轻量系统开发【9】WiFi之STA模式连接热点

9.1AT指令操作WiFi 我们可以使用AT指令进行Hi3861 WiFi操作,连接热点、ping服务器等。 但是很多时候,我们需要实现开机后自动连接到某个热点,光靠AT指令不行。 Hi3861 为我们提供了WiFi操作的相关API,方便我们编写代码&#xff0…

如何用ServBay快速构建下一代GraphQL应用

在本指南中,我们将深入探讨如何利用ServBay一站式环境和Docker,构建可扩展的GraphQL微服务。我们将从微服务架构和GraphQL的基础知识入手,逐步深入到如何利用现代工具和技术构建、容器化并部署我们的微服务。 理解微服务架构 微服务架构是一…

举个栗子!Tableau 技巧(270):用 Lookup 函数创建多 KPI 文本表

在 Tableau 中,文本表常用于呈现明细数据。但其实,数据粉如果想在同一视图中查看多个数据指标,也可以用到文本表。 如下示例,是不是很直观的就可以查看:不同区域随时间推移的数据指标情况呢? 如何在 Tablea…

前后端分离vue.js+nodejs新闻文章发布论坛网站系统44x94

Vue: Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及…