策略模式实战应用

场景

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

代码实现

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

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

如下是年vip代码实现

如下是月vip代码实现

如下是终生vip代码实现

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

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

相关推荐
Engineer邓祥浩14 小时前
设计模式学习(24) 23-22 策略模式
学习·设计模式·策略模式
芒鸽15 小时前
基于 lycium 适配鸿蒙版 Nginx 的解决方案
nginx·harmonyos·策略模式
半桔15 小时前
【设计模式】策略模式:可插拔算法,从硬编码到灵活适配,体会“算法解耦“思想
java·c++·算法·设计模式·策略模式
进击的小头1 天前
行为型模式:策略模式的C语言实战指南
c语言·开发语言·策略模式
项目申报小狂人1 天前
2025年最新改进策略--Experience Exchange Strategy 经验交换策略(EES),附MATLAB完整代码
开发语言·matlab·策略模式
代码丰2 天前
项目里接了多个第三方 SDK 后,如何使用适配器模式+策略模式优化?(Adapter + Strategy)
java·适配器模式·策略模式
懵萌长颈鹿2 天前
策略模式 (Strategy Pattern)
策略模式
李少兄2 天前
IntelliJ IDEA 全局搜索完全指南:从高效使用到快捷键失效排查
java·intellij-idea·策略模式
旅之灵夫4 天前
【GitHub项目推荐--OpenEmu:macOS 复古游戏模拟器】
3d·github·策略模式
点云SLAM8 天前
C++内存泄漏检测之手动记录法(Manual Memory Tracking)
开发语言·c++·策略模式·内存泄漏检测·c++实战·new / delete