策略模式实战应用

场景

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

代码实现

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

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

如下是年vip代码实现

如下是月vip代码实现

如下是终生vip代码实现

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

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

相关推荐
振鹏Dong12 小时前
策略模式——本质是通过Context类来作为中心控制单元,对不同的策略进行调度分配。
java·策略模式
资源大全免费分享1 天前
MacOS 的 AI Agent 新星,本地沙盒驱动,解锁 macOS 操作新体验!
人工智能·macos·策略模式
〆、风神3 天前
策略模式与元数据映射模式融合 JSR 380 验证规范实现枚举范围校验
windows·spring·策略模式
码界孔乙己6 天前
python策略模式
python·策略模式
此木|西贝6 天前
【设计模式】策略模式
设计模式·策略模式
患得患失9498 天前
【设计模式】策略模式(Strategy Pattern)详解
设计模式·bash·策略模式
一恍过去9 天前
SpringBoot通过Map实现天然的策略模式
spring boot·后端·策略模式
Vic101019 天前
Java 中装饰者模式与策略模式在埋点系统中的应用
java·开发语言·策略模式
獨枭10 天前
在 macOS 上配置 VS Code 使用 PowerShell(适配 Homebrew 安装)
macos·策略模式
cijiancao10 天前
23种设计模式中的策略模式
设计模式·策略模式