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

Java中的设计模式------策略设计模式

策略设计模式:它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式能够让算法变化,不会影响其他的算法。

可以理解成:QQ上的不同的状态模式,每种状态都是独立的,用户可以根据自己的近期心情来选择QQ上的状态模式。简单说,就是 “把做一件事的不同方法分开装,想用哪个就换哪个”,让代码更灵活,好维护。

比如做一个电商折扣系统:

  • 正常情况是 “无折扣” 策略
  • 节假日用 “满 100 减 20” 策略
  • VIP 用户用 “打 8 折” 策略

这些折扣算法就是不同的 “策略”,当需要切换折扣时,直接换一个策略类就行,不用动结算的主逻辑。

核心好处:

  1. 想加新策略(比如 “第二件半价”),直接新增一个策略类,不用改老代码
  2. 策略之间互相独立,改一个不影响其他
  3. 调用方可以根据情况动态选策略(比如根据用户等级自动切换)

@SuppressWarnings("all")
public class Shopping {static void main() {System.out.print("entre AccpetModel:");Integer AccpetModel = Integer.valueOf(IO.readln());CashContext cashContext = new CashContext(AccpetModel);System.out.print("entre the Price:");Double AccpetPrice = Double.valueOf(IO.readln());System.out.print("entre the Quantity:");Integer AccpetQuantity = Integer.valueOf(IO.readln());double result = cashContext.getResult(AccpetPrice, AccpetQuantity);System.out.println("result = " + result);}
}
//收取费用的抽象类
abstract class  CashSuper{public abstract double AccpetCash(double money, int num);
}
//正常收费
class CashNormal extends CashSuper{@Overridepublic double AccpetCash(double money, int num) {return money*num;}
}
//打折收费
class CashRebate extends CashSuper{private double moneyRebate = 1d;/*初始化时需要输入折扣数 0.8*/public CashRebate(double moneyRebate) {this.moneyRebate = moneyRebate;}@Overridepublic double AccpetCash(double money, int num) {return money*num*moneyRebate;}
}
//返利条件
class CashReturn extends CashSuper{private double moneyCondition = 1d;//返利条件private double moneyReturn = 0d;//返利数值/*返利收费,初始化需要输入返利条件和返利值* 比如当满300返利100时,就输入300和100* */public CashReturn(double moneyCondition, double moneyReturn) {this.moneyCondition = moneyCondition;this.moneyReturn = moneyReturn;}/*计算收费,当到达返利条件,就按原价减去返利*/@Overridepublic double AccpetCash(double money, int num) {double result = money * num;if (result > moneyReturn && moneyCondition > 0)/*每当满了300就会返现100块钱*/result = result - Math.floor( result / moneyCondition)* moneyReturn;return result;}
}
/**/
class CashContext{private CashSuper cashSuper;/*通过构造方法传入收费策略*/public CashContext(int cateType){switch (cateType) {case 1 -> cashSuper = new CashNormal();case 2 -> cashSuper = new CashRebate(0.8);case 3 -> cashSuper = new CashReturn(300, 100);default -> throw new IllegalStateException("Unexpected value: " + cateType);}}public double getResult(double money, int num){return this.cashSuper.AccpetCash(money, num);}
}

http://www.dtcms.com/a/582463.html

相关文章:

  • 太原做网站设计电子商务网站设计原理书籍
  • 网站服务器迁移企业管理咨询机构
  • Redis —— 架构概览
  • 筑牢用电防线:Acrel-1000 自动化系统赋能 35kV 园区高效供电-安科瑞黄安南
  • 青海住房和城乡建设部网站山东省城乡建设厅官网
  • 哈尔滨智能建站模板厦门 网站建设 网站开发
  • 第3节 RSA算法开启公钥加密时代
  • 昆山做网站公司哪家好青岛市黄岛区城市建设局 网站
  • 从正确到卓越:昇腾CANN算子开发高级性能优化指南
  • 网站建设 国家标准微网站自助建站
  • 政务公开系统网站建设短剧分销平台
  • 网站建设的静态网页作业青田网站做服装找工作
  • 【1min 速通 -- PyTorch 张量数据类型】张量类型的获取、转化与判别
  • git stash push 命令作用及使用场景
  • 青岛李沧区城乡建设局网站自己给网站做优化怎么做
  • 梧州网站建设设计朝阳专业网站建设
  • 网站模板和定制的区别网站营销应该怎么做
  • 用自己服务器做网站用备案wordpress功能小工具增加按钮
  • 2025 年的热门 AI 编程工具评测:Cursor、Claude Code、Codex、Lovable、v0 等
  • 切片上传version2.0 进度用模拟后端实时返回的进度,大文件1.05GB耗时7.49秒
  • App HTTPS 抓包 工程化排查与工具组合实战
  • 分页条初始化
  • 网站做seo的好处京东网上购物官方网站
  • 网站的风格设计下载了wordpress然后怎么用
  • 网站开发用的开源系统龙华在深圳算什么档次
  • 正确使用玛伐凯泰(Mavacamton)治疗梗阻性肥厚型心肌病的剂量间隔
  • ViDoRAG详解:多模态文档检索增强生成框架的革命性突破
  • 玉溪做网站建设的公司昆明网站设计都需要设计什么
  • 计算机关于网站开发的证书关于申请网站建设的报告
  • 获取DPI、设置进程DPI感知(C++源码)