
java 策略模式(大话设计模式)
发布日期:2021-05-19 21:35:50
浏览次数:20
分类:精选文章
本文共 2311 字,大约阅读时间需要 7 分钟。
策略模式下,我们定义了一个统一的接口,然后每个具体的算法都实现这个接口。通过上下文类来决定使用哪个具体的策略。这种设计使得算法的变化不会影响到使用算法的客户端。
现金收费项目是一个很好的例子。我们定义了一个CashSuper
的抽象接口,具体策略包括CashNormal
(正常收费)、CashRebate
(打折收费)和CashReturn
(满满扣扣收费)。
每个具体策略都实现了相同的接口,但具体实现方式不同。例如:
public class CashNormal extends CashSuper { @Override public double acceptCash(double money) { return money; }}
public class CashRebate extends CashSuper { private double moneyRebate = 1.0; public CashRebate(String moneyRebate) { this.moneyRebate = Double.parseDouble(moneyRebate); } @Override public double acceptCash(double money) { return money * moneyRebate; }}
public class CashReturn extends CashSuper { private double moneyCondition = 1.0; private double moneyReturn = 1.0; public CashReturn(String moneyCondition, String moneyReturn) { this.moneyCondition = Double.parseDouble(moneyCondition); this.moneyReturn = Double.parseDouble(moneyReturn); } @Override public double acceptCash(double money) { double result = money; if (money >= moneyCondition) { result = money - Math.floor(money / moneyCondition) * moneyReturn; } return result; }}
CashContext上下文类决定了使用哪个策略:
public class CashContext { CashSuper cs = null; public CashContext(String type) { switch (type) { case "正常收费": cs = new CashNormal(); break; case "满300返100": cs = new CashReturn("300", "100"); break; case "打8折": cs = new CashRebate("0.8"); break; } } public double getResult(double money) { return cs.acceptCash(money); }}
客户端通过CashContext选择不同的策略:
public class CashClient { public static void main(String[] args) { CashContext context = new CashContext("正常收费"); double money0 = context.getResult(300); System.out.println("正常收费: " + money0); context = new CashContext("打8折"); double money1 = context.getResult(300); System.out.println("打8折: " + money1); context = new CashContext("满300返100"); double money2 = context.getResult(300); System.out.println("满300返100: " + money2); }}
这种设计方式使得算法的变化可以通过简单地更换策略实现,从而提升系统的灵活性和扩展性。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月11日 10时49分04秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
网络协议和支持(一)、uuid模块
2019-03-17
numpy.frombuffer()
2019-03-17
文件结束符EOF
2019-03-17
Latex 错误集合
2019-03-17
Python的内置函数(四十一)、 index()
2019-03-17
Python字符串操作之字符串分割与组合
2019-03-17
tf.tuple
2019-03-17
windows系统配置自动tomcat
2019-03-17
49数据通路的功能和基本结构
2019-03-17
Java面试宝典(2020版)
2019-03-17
Springboot 初學習
2019-03-17
2020年云南省专升本 - 「计算机」专业各院校招生计划
2019-03-17
Android 四大组件、五大存储、六大布局总结
2019-03-17
打工族有房有车,原来是这么实现的
2019-03-17
算法 顺序查找/折半查找/冒泡排序/选择排序(待改)
2019-03-17
Rancher从入门到精通-2.0 配置gitlab代码库 404页面 原因有点扯
2019-03-17