策略模式(Strategy)简介
一、策略模式(Strategy)简介
策略模式是行为模式.
行为模式:规定了各个对象应该具备的职责以及对象间的通信模式,它很好的规范了对象间调用和数据传递方式
策略模式适合于算法经常变化的情况
算法的变化不会影响到使用算法的客户,算法可以独立于使用它的客户所变化
二、简单例子
普通客户,会员,VIP会员购买商品价格不一样
抽象类
package strategy; /* * 计算商品价格的抽象类 */ public abstract class Account { abstract public double getPrice(int amount,double d); }
普通
package strategy; /** * 普通客户商品价格计算 */ public class CommonAccount extends Account { @Override public double getPrice(int amount, double price) { return amount*price; } }
会员
package strategy; /** * 普通会员商品价格计算打9折 */ public class InsiderAccount extends Account { @Override public double getPrice(int amount, double price) { return amount*price*9/10; } }
VIP
package strategy; /** * VIP会员商品价格计算打8折 */ public class VipAccount extends Account { @Override public double getPrice(int amount, double price) { return amount*price*8/10; } }
上下文类
package strategy; /** * 此类用于维护策略类的引用 */ public class Context { //引用 private Account account; //初始化 public Context(Account account){ this.account=account; } //调用计算方法 public double doAccount(int amount, double d){ return account.getPrice(amount, d); } }
测试类
package strategy; /** * 此策略模式测试类 */ public class Test { public static void main(String[] args) { // 声明商品 String name = "DVD"; int amount = 2; double price = 50; double sum = 0; // 声明对象 // 普通客户 Context context = new Context(new CommonAccount()); sum = context.doAccount(amount, price); System.out.println("普通客户:没有折扣,购买的商品名称: " + name + " 数量: " + amount + " 单价:" + price + " 应付金额:" + sum); // 普通会员 context = new Context(new InsiderAccount()); sum = context.doAccount(amount, price); System.out.println("普通会员:9折优惠,购买的商品名称: " + name + " 数量: " + amount + " 单价:" + price + " 应付金额:" + sum); // VIP context = new Context(new VipAccount()); sum = context.doAccount(amount, price);
System.out.println("VIP客户:8折优惠,购买的商品名称: " + name + " 数量: " + amount + " 单价:" + price + " 应付金额:" + sum); } }
结果:
普通客户:没有折扣,购买的商品名称: DVD 数量: 2 单价:50.0 应付金额:100.0 普通会员:9折优惠,购买的商品名称: DVD 数量: 2 单价:50.0 应付金额:90.0 VIP客户:8折优惠,购买的商品名称: DVD 数量: 2 单价:50.0 应付金额:80.0
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用