策略模式实战应用

场景

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

代码实现

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

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

如下是年vip代码实现

如下是月vip代码实现

如下是终生vip代码实现

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

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

相关推荐
geovindu9 天前
java: Strategy Pattern
java·开发语言·后端·设计模式·策略模式·行为模式
geovindu10 天前
CSharp: Strategy Pattern
开发语言·后端·c#·.net·.netcore·策略模式·行为模式
沪上企服通12 天前
代账数据的可移植性设计:开放接口、账套导出与 exit strategy 工程笔记(上海 5 家样本对照)
笔记·策略模式
码匠许师傅12 天前
【设计模式精讲】26.策略模式(Strategy)
c++·设计模式·策略模式·uml
++==15 天前
基于策略模式的应用层协议支持
策略模式
Java后端的Ai之路15 天前
23、Python - 策略模式
linux·python·策略模式
程序员夏洛17 天前
什么是策略模式?一般用在什么场景?
策略模式
user_admin_god18 天前
数据采集/交换系统设计经验
spring boot·spring·策略模式
Nontee25 天前
Quartz 集群 + 策略模式:逾期预警推送系统设计实录
linux·服务器·策略模式
二炮手亮子1 个月前
从 BIO、NIO、AIO 到多路复用与 Netty
策略模式·nio