策略模式实战应用

场景

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

代码实现

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

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

如下是年vip代码实现

如下是月vip代码实现

如下是终生vip代码实现

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

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

相关推荐
「QT(C++)开发工程师」1 天前
C++ 策略模式
开发语言·c++·策略模式
佑白雪乐1 天前
<Linux基础12集>1-11集大复习Review
linux·运维·策略模式
临水逸3 天前
OpenClaw WebUI 的外网访问配置
人工智能·策略模式
她说..3 天前
策略模式+工厂模式实现订单校验功能
java·spring boot·java-ee·简单工厂模式·策略模式
短剑重铸之日3 天前
《设计模式》第五篇:策略模式
java·后端·设计模式·策略模式
帅得不敢出门3 天前
Android定位RK编译的system.img比MTK大350M的原因
android·framework·策略模式
琹箐3 天前
设计模式——策略模式
设计模式·策略模式
她说..4 天前
策略模式+工厂模式实现审批流(面试问答版)
java·后端·spring·面试·springboot·策略模式·javaee
进击的小头5 天前
设计模式组合应用:嵌入式通信协议栈
c语言·设计模式·策略模式
Wyy_9527*5 天前
行为型设计模式——策略模式
设计模式·策略模式