设计模式——行为型——策略模式Strategy

Q:策略模式的特点

A:

  1. 具体算法从具体的业务方法中独立出来
  2. 策略模式是同行为的不同实现

Q:什么时候使用策略模式

A:多个if-else使用策略模式

收费对象类

public class CashContext {private CashStrategy cashStrategy;public double getMoney(double money) {return cashStrategy.acceptCash(money);}
}

收费策略接口

public interface CashStrategy { double acceptCash(double money); }

正常收费类

public class NormalCash implements CashStrategy {@Overridepublic double acceptCash(double money) {return money;}
}

打折收费类

public class RebateCash implements CashStrategy {private double discounts = 10;@Overridepublic double acceptCash(double money) {return money * discounts / 10;}
}

返利收费类

public class ReturnCash implements CashStrategy {private double condition = 0;private double rebate = 0;@Overridepublic double acceptCash(double money) {if (money >= condition) {money -= Math.floor(money / condition) * rebate;}return money;}
}

演示类

public class Demo {public static void main(String[] args) {String discounts = "满300减100";CashContext cc = new CashContext();switch (discounts) {case "正常收费":cc.setCashStrategy(new NormalCash());break;case "打9折":cc.setCashStrategy(new RebateCash(9));break;case "满300减100":cc.setCashStrategy(new ReturnCash(300, 100));break;}double price = 400;double money = cc.getMoney(price);System.out.println("优惠后的费用为:" + money);}
}

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

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

相关文章

Mysql---安全值守常用语句

文章目录 目录 文章目录 一.用户权限设置 用户设置 元数据查询 Union联合查询 分组查询 字符串函数 总结 一.用户权限设置 用户设置 #用户创建 create user "用户名""%主机名" identified by "密码" #用户删除 drop user 用户名 #用户查询…

LVS负载均衡-DR模式配置

LVS:Linux virtual server ,即Linux虚拟服务器 LVS自身是一个负载均衡器(Director),不直接处理请求,而是将请求转发至位于它后端的真实服务器real server上。 LVS是四层(传输层 tcp/udp)负载均衡…

多维数组和交错数组笔记

1.) 关于数据的几个概念: Rank,即数组的维数,其值是数组类型的方括号之间逗号个数加上1。 Demo:利用一维数组显示斐波那契数列F(n) F(n-1) F(n-2) (n >2 ),每行显示5项,20项. static void Main(string[] args){int[] F n…

uniapp流浪动物救助小程序Java宠物领养小程序springboot

uniapp流浪动物救助小程序Java宠物领养小程序springboot 代码40块,需要的私聊 前台基于uniapp小程序 后台管理基于springbootvue前后端分离项目 开发语言:Java 框架:springboot vue JDK版本:JDK1.8(或11&#xf…

Qt源程序编译及错误问题解决

Error 5 while parsing C:/qt-everywhere-src-6.6.2/qt-build/qtdeclarative/src/qmlmodels/meta_types/qt6qmlmodels_release_metatypes.json: illegal value .json 文件为空文件0字节,加 “[]”,不要引号。可以解决这类错误。 Qt编译 Qt for Windows…

Web3:探索区块链与物联网的融合

引言 随着科技的不断发展,区块链技术和物联网技术都成为了近年来备受瞩目的前沿技术。而当这两者结合在一起,将产生怎样的化学反应呢?本文将深入探讨Web3时代中区块链与物联网的融合,探索其意义、应用场景以及未来发展趋势。 1. …

存储的过程

一、存储过程 1.1 概述 存储过程可以轻松而高效的去完成这个需求,有点类似shell脚本里的函数 1.2 特点 存储过程在数据库中创建并保存,它不仅仅是 SQL 语句的集合,还可以加入一些特殊的控制结构,也可以控制数据的访问方式。存储过…

快速创建zookeeper集群

先说明,我很穷!!,开不了多个虚拟机,zookeeper集群的3个节点都放在同一个虚拟机,所以搭建是一个伪集群,因为一个服务器挂机,所有节点都会停止。工作实际情况安装到三个服务器&#xf…

【C++】STL 标准模板库

前言 在前一章种我们介绍了C中的模板的使用,这是一种泛型编程,模板的使用能让我们减少大量的相似代码,减少我们的代码量与工作量,写出更加高效简洁的代码,模板如此好用,但还是要我们先出写一个泛型类或函数…

(一)基于IDEA的JAVA基础9

循环结构及特点 while循环 do while循环 for 循环 特点:有循环条件 循环起始值 循环自增量(每次自增的量) 循环操作 while循环 语法: 初始部分//定义变量的地方,声明变量 while(循环条件){ 循环操作; 迭代部分; } 流程图: 练习:打…

giteed的使用

1. 将工作区的内容添加到暂存区 你的工作区要有内容(.git 不算) 注意:空文件可以添加,但是空文件夹不管 如果没有形成历史版本之前,暂存区的同名文件会被覆盖 //打开命令行,切换到 .git所在的目录&…

CleanMyMac X2024专业免费的国产Mac笔记本清理软件

非常高兴有机会向大家介绍CleanMyMac X 2024这款专业的Mac清理软件。它以其强大的清理能力、系统优化效果、出色的用户体验以及高度的安全性,在Mac清理软件市场中独树一帜。 CleanMyMac X2024全新版下载如下: https://wm.makeding.com/iclk/?zoneid49983 一、主要…