策略模式实战应用

场景

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

代码实现

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

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

如下是年vip代码实现

如下是月vip代码实现

如下是终生vip代码实现

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

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

相关推荐
koping_wu3 天前
【设计模式】设计模式原则、单例模式、工厂模式、模板模式、策略模式
单例模式·设计模式·策略模式
kkk_皮蛋3 天前
WebRTC 中的临界锁实现:从 CritScope 到 RAII 机制的深度解析
webrtc·策略模式
世转神风-4 天前
qt-弹框提示-界面提醒
开发语言·qt·策略模式
Wcowin5 天前
OneClip 开发经验分享:从零到一的 macOS 应用开发
经验分享·macos·策略模式
开心香辣派小星9 天前
23种设计模式-19策略模式(Strategy Pattern)
java·设计模式·策略模式
weixin_4624462314 天前
【原创实践】python版playwright截取多个图
开发语言·python·策略模式
MC丶科14 天前
Java设计模式漫画英雄宇宙之策略模式:从支付系统重构到软考高频考点(附完整代码 + 面试高频问法)
java·设计模式·重构·策略模式
benxin123414 天前
macOS 上使用 Homebrew 安装和配置 PostgreSQL 的详细步骤
macos·postgresql·策略模式
佛祖让我来巡山17 天前
设计模式深度解析:策略模式、责任链模式与模板模式
设计模式·责任链模式·策略模式·模版模式
王柏龙19 天前
Win11 无法找到本地组策略编辑器的解决方法
windows·策略模式