策略模式
模式 策略
2023-09-11 14:14:10 时间
策略模式(Strategy)。定义一系列的算法,把它们一个个封装起来,而且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
package gof23; public class StrategyTest { public static void main(String[] args) { CashContext cc = null; cc = new CashContext("正常收费"); System.out.println("收费为:" + cc.getResult(2000) +"元"); cc = new CashContext("满300返100"); System.out.println("收费为:" + cc.getResult(2000) +"元"); cc = new CashContext("打8折"); System.out.println("收费为:" + cc.getResult(2000) +"元"); } } class CashContext { private CashSuper cs = null; public CashContext(String type) { switch(type) { case "正常收费": CashNormal cs0 = new CashNormal(); cs = cs0; break; case "满300返100": CashReturn cs1 = new CashReturn(300, 100); cs= cs1; break; case "打8折": CashRebate cs2 = new CashRebate(0.8); cs = cs2; break; } } public double getResult(double money) { return cs.acceptCash(money); } } abstract class CashSuper { public abstract double acceptCash(double money); } /* * 正常收费。原价返回 */ class CashNormal extends CashSuper { @Override public double acceptCash(double money) { return money; } } /* * 打折收费。初始化时,须要输入折扣率。如0.8 */ class CashRebate extends CashSuper { private double moneyRebate = 1d; public CashRebate(double moneyRebate) { this.moneyRebate = moneyRebate; } @Override public double acceptCash(double money) { return money * moneyRebate; } } /* * 返利收费。初始化时必须输入返利条件和返利值。比方满300返100, * 则moneyCondition为300,moneyReturn为100 */ class CashReturn extends CashSuper { private double moneyCondition = 0.0d; private double moneyReturn = 0.0d; public CashReturn(double moneyCondition, double moneyReturn) { this.moneyCondition = moneyCondition; this.moneyReturn = moneyReturn; } @Override public double acceptCash(double money) { double result = money; if(result > moneyCondition) result = money - Math.floor(money / moneyCondition) * moneyReturn; return result; } }
执行结果为:
收费为:2000.0元 收费为:1400.0元 收费为:1600.0元
相关文章
- php设计模式-策略模式
- 粒子系统优化:Mesh模式下的优化策略
- 每个程序员都应注意的9种反面模式
- C#订阅与发布标准实现 visual studio code .net 开发 设计模式之☞策略模式 C#字符串转二进制、二进制转字符串 c# 接口的协变和逆变 c# 使用迭代器来创建可枚举类型 博客园首页新随笔联系订阅管理 随笔 - 117 文章 - 0 评论 - 57 c# 创建,加载,修改XML文档
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
- 什么是SAAS模式网站?
- 策略模式与模板方法模式
- 跟着实例学习设计模式(9)-桥接模式bridge(结构型)
- Android SDK源码阅读:时序图思维导图式的记忆模式
- glsl线框网格模式wireframe
- 策略模式
- java实现23种设计模式-策略者模式
- Hadoop完全分布式模式
- PHP 设计模式 笔记与总结(8)策略模式
- Burp Suite学习之Intruder的4种攻击模式
- oc kvc的模式:匹配搜索模式(模式匹配)、装包解包
- 程序员好书推荐之 《SQL反模式 (SQL Antipatterns)》
- 禁用Chrome的“请停用以开发者模式运行的扩展程序”提示
- 《软件建模与设计: UML、用例、模式和软件体系结构》一一3.2 设计验证和确认
- 浅析node_modules如何解决依赖地狱问题、如何从node_modules加载package、目录结构的2种模式、版本重复及可能导致的问题、Semver规范及lock文件、pnpm解决理念介绍
- Java设计模式之创建型:工厂模式详解(简单工厂+工厂方法+抽象工厂)
- 结构型模式之外观模式
- 策略模式
- 设计模式详解:Strategy(策略模式)
- 【设计模式】简单工厂模式、工厂方法模式、抽象工厂模式
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 19行为型模式之策略模式
- (5.12)mysql高可用系列——复制中的在线切换GTID模式/增加节点/删除节点
- 地理围栏等物联网安防产品将改变过往模式
- 枚举方式实现设计模式-策略模式
- jdk的server模式修改无效(关于client和server模式)
- 打开“勤沟通”模式之应用中华通网络电话
- 详解移动App开发的几种方式和各自详细的优缺点,以及如何选择App开发模式,最全总结,一次讲清
- 2017年中国智慧城市PPP模式发展情况分析