策略模式实战应用

场景

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

代码实现

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

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

如下是年vip代码实现

如下是月vip代码实现

如下是终生vip代码实现

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

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

相关推荐
神奇霸王龙8 小时前
AgentDesk 配置 Codex+ selltoken 中转 API 实测教程(2026 年 8 月更新)
人工智能·ai·ai编程·策略模式·codex·agentdesk
赶路人儿5 天前
MacOS 下实现 AI 操控电脑(Computer Use)的思考
人工智能·macos·策略模式
Fozei5 天前
录屏原理与鼠标可视化
计算机外设·策略模式
AIex-YH9 天前
菌种工艺四讲(三):育种工具不是“越新越好“,是“越匹配越好“
制造·策略模式
起司喵喵9 天前
Flutter-MacOS桌面OS系统|flutter.+window_manager客户端OS模板
flutter·macos·策略模式
啊真真真9 天前
macOS下libnfc ..写卡失败问题及解决方案
macos·策略模式
Eric Woo X11 天前
macOS 旧版本无法启动 Steam ?一条命令恢复运行(2026年7月实测)
macos·策略模式
张小姐的猫19 天前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
笨拙的老猴子25 天前
小明学架构师的第七课:策略模式:告别if-else的选择困难症
系统架构·策略模式
肖爱Kun1 个月前
C++设计策略模式
开发语言·c++·策略模式