当前位置: 首页 > news >正文

设计模式——行为型——策略模式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);}
}

相关文章:

  • vue2项目设置浏览器标题title及图标logo
  • Django批量插入和分页器
  • 阿里云 -- 连接云服务器ECS、管理云服务器ECS、WordPress 页面配置
  • uniapp H5 开发,公众号时请求跨域了,要用proxy
  • 路径优化算法 | 基于A星算法实现复杂城市地形下无人机三维航迹规划
  • 计算机票.java
  • 文心一言官网入口:一站式解决AI疑惑,探索AI世界的无限可能
  • Spring Boot项目启动过程中为什么日志打印没有显示完整包名呢?
  • Qt实现TFTP Server和 TFTP Client(二)
  • Adobe推出20多个,企业版生成式AI定制、微调服务
  • GpuMall智算云:推动科技进步的计算力之源
  • 线上抓娃娃游戏开发
  • 【深度学习基础(4)】pytorch 里的log_softmax, nll_loss, cross_entropy的关系
  • ChatGPT 去年至今 0 增长;Sora 风暴仍未停歇,大量 AIGC 视频应用涌现 | AI 头条
  • 基于云计算的前端资源管理系统的设计与实现
  • (三)从jvm层面了解线程的启动和停止
  • [译]如何构建服务器端web组件,为何要构建?
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 30秒的PHP代码片段(1)数组 - Array
  • 4个实用的微服务测试策略
  • Android框架之Volley
  • Angular4 模板式表单用法以及验证
  • CentOS 7 防火墙操作
  • JavaWeb(学习笔记二)
  • Java编程基础24——递归练习
  • LeetCode算法系列_0891_子序列宽度之和
  • php ci框架整合银盛支付
  • React 快速上手 - 07 前端路由 react-router
  • webpack入门学习手记(二)
  • 技术发展面试
  • 浅谈web中前端模板引擎的使用
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​VRRP 虚拟路由冗余协议(华为)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (2022 CVPR) Unbiased Teacher v2
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (C语言)fgets与fputs函数详解
  • (第二周)效能测试
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)用.Net的File控件上传文件的解决方案
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net程序帮助文档制作
  • @RequestBody与@ResponseBody的使用
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [bzoj2957]楼房重建
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream