策略模式实战应用

场景

假设做了个卖课网站,会员等级分为月vip、年vip、终生vip,每个等级买课的优惠力度不一样,传统的写法肯定是一堆的 if-else,现在使用策略模式写出代码实现

代码实现

策略模式的核心思想就是对扩展开放,对修改关闭。

所以需要定义一个接口,便于使用多态

如下是年vip代码实现

如下是月vip代码实现

如下是终生vip代码实现

最后,在业务层注入bean对象,并进行方法调用,可以看到,这里没有使用@Autowired来进行bean的注入,而是定义了一个 List 构造方法,当Spring IoC实例化这个bean的时候会看构造方法是有参的还是无参的,如果有参数,会把参数一并初始化,如果这个参数是list,会把List集合泛型相关的所有接口子类找出来实例化

这样就是利用了策略模式改造,如果后续还有其它的什么vip,只需要再重新定义一个接口的实现类即可,CourseRelationService这里面的逻辑无需修改,达到了对扩展开放,对修改关闭的目的。

相关推荐
Nontee4 天前
Quartz 集群 + 策略模式:逾期预警推送系统设计实录
linux·服务器·策略模式
二炮手亮子5 天前
从 BIO、NIO、AIO 到多路复用与 Netty
策略模式·nio
cui_hao_nan6 天前
大模型负责“聪明“,策略模式负责“执行“:智能配图系统如何自动选择图片来源
策略模式·ai开发
阿萨德528号9 天前
npm 包发布实战指南:从零发布、更新迭代到版本治理
前端·npm·策略模式
AI人工智能+电脑小能手9 天前
大白话说Java设计模式-26-策略模式(业务实战篇)
java·spring·设计模式·策略模式·支付系统·算法切换
coding4u10 天前
Mac 多桌面(Spaces)的正确用法:你的屏幕可以大三倍
macos·docker·计算机外设·文件管理·策略模式
AI人工智能+电脑小能手10 天前
大白话说Java设计模式-27-策略模式(源码剖析篇)
java·spring·设计模式·策略模式·源码分析·事务管理·comparator
小此方10 天前
Linux加餐(一):藏在Linux中的设计模式(一)策略模式与日志
linux·设计模式·策略模式
coding4u19 天前
Mac 外接显示器完全指南:从插上线到调好每个参数
macos·计算机外设·文件管理·显示器·策略模式·quick look扩展
神奇霸王龙21 天前
AgentDesk 配置 Codex+ selltoken 中转 API 实测教程(2026 年 8 月更新)
人工智能·ai·ai编程·策略模式·codex·agentdesk