策略模式实战应用
场景
假设做了个卖课网站,会员等级分为月vip、年vip、终生vip,每个等级买课的优惠力度不一样,传统的写法肯定是一堆的 if-else,现在使用策略模式写出代码实现
代码实现
策略模式的核心思想就是对扩展开放,对修改关闭。
所以需要定义一个接口,便于使用多态

如下是年vip代码实现

如下是月vip代码实现

如下是终生vip代码实现

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

这样就是利用了策略模式改造,如果后续还有其它的什么vip,只需要再重新定义一个接口的实现类即可,CourseRelationService这里面的逻辑无需修改,达到了对扩展开放,对修改关闭的目的。
相关文章:
策略模式实战应用
场景 假设做了个卖课网站,会员等级分为月vip、年vip、终生vip,每个等级买课的优惠力度不一样,传统的写法肯定是一堆的 if-else,现在使用策略模式写出代码实现 代码实现 策略模式的核心思想就是对扩展开放,对修改关闭…...
JAVA集合-Map
// 【Map】:双列集合,键值对形式存储,映射关系(kay,value) // 实现:HashMap // 子接口:SortedMap Map的子接口 // 实现类:TreeMap // HashMap // 1。可以插入null // …...
利用Simulink Test进行模型单元测试 - 1
1.搭建用于测试的简单模型 随手搭建了一个demo模型MilTestModel,模型中不带参数 2.创建测试框架 1.模型空白处右击 测试框架 > 为‘MilTestModel’创建 菜单 2.在创建测试框架对话框中,点击OK,对应的测试框架MilTestMode_Harness1就自动…...
深入探讨代理技术:保障网络安全与高效爬虫
1. Socks5代理与IP代理的区别与应用 Socks5代理和IP代理是代理技术中的两个重要方面,它们有着不同的特点和应用场景。Socks5代理是一种协议,支持TCP和UDP流量传输,适用于需要实时数据传输的场景,例如在线游戏或实时通信应用。而I…...
HDMI接口的PCB布局布线要求
高清多媒体接口(High Definition Multimedia Interface),简称:HDMI,是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。随着技术的不断提升,HDMI的传输速率也不断的提升&#…...
Linux tar包安装 Prometheus 和 Grafana(知识点:systemd Unit/重定向)
0. 介绍 用tar包的方式安装 Prometheus 和 Grafana Prometheus:开源的监控方案Grafana:将Prometheus的数据可视化平台 Prometheus已经有了查询功能为什么还需要grafana呢?Prometheus基于promQL这一SQL方言,有一定门槛!Grafana基于浏览器的操作与可视化图表大大降低了理解难…...
【Vue框架】用户和请求
前言 在上一篇 【Vue框架】Vuex状态管理 针对Vuex状态管理以getters.js进行说明,没有对其中state引入的对象进行详细介绍,因为整体都比较简单,也就不对全部做详细介绍了;但其中的user.js涉及到获取用户的信息、前后端请求的token…...
NGINX组件(rewrite)
一、location匹配的规则和优先级(*) URI:统一资源标识符,是一种字符串标识,用于标识抽象的或者是物理资源;如:文件、图片、视频等 nginx中的URI匹配的是:网址”/“后的路径 如&…...
网页显示摄像头数据的方法---基于web video server
1. 背景: 在ros系统中有发布摄像头的相关驱动rgb数据,需求端需要将rgb数据可以直接在网页上去显示。 问题解决: web_video_server功能包,相关链接: web_video_server - ROS Wiki 2. 下载,安装和编译&a…...
SIFT 算法 | 如何在 Python 中使用 SIFT 进行图像匹配
介绍 人类通过记忆和理解来识别物体、人和图像。你看到某件事的次数越多,你就越容易记住它。此外,每当一个图像在你的脑海中弹出时,它就会将该项目或图像与一堆相关的图像或事物联系起来。如果我告诉你我们可以使用一种称为 SIFT 算法的技术来教机器做同样的事情呢? 尽管…...
K8S系列四:服务管理
写在前面 本文是K8S系列第四篇,主要面向对k8s新手同学。阅读本文需要读者对k8s的基本概念,比如Pod、Deployment、Service、Namespace等基础概念有所了解,尚且不了解的同学推荐先阅读本系列的第一篇文章《K8S系列一:概念入门》[1]…...
冠达管理:融券卖出交易规则?
融券卖出买卖是指投资者在没有实际持有某只股票的情况下,经过借入该股票并卖出来取得赢利的一种股票买卖方式。融券卖出买卖规矩针对不同市场、不同证券公司之间可能会存在一些差异,但基本的规矩包含如下几个方面。 一、融资融券的资历要求 在进行融券卖…...
图像变形之移动最小二乘算法(MLS)
基本原理 基于移动最小二乘的图像变形是通过一组源控制点和目标控制点来控制变形,对于每一个待求变形后位置的点而言,根据预设的形变类型(如仿射变换、相似变换、刚性变换)求解一个最小二乘优化目标函数估计一个局部的坐标变换矩阵…...
搭建一个功能齐全的网站
搭建一个功能齐全的网站,需要准备和掌握的一些关键技术和功能可概括如下: 前端技术: HTML/CSS - 网页内容结构和样式JavaScript - 实现网页交互功能前端框架(Vue、React等) - 更高效开发交互页面响应式设计 - 网站适配移动端 后端技术: 服务器(Linux、Nginx等) - 提供网站访…...
Java-jar和war包的区别
jar包和war包的区别: 1、war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块;jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的。 2、war包是做好一个web应用后,通…...
分类预测 | MATLAB实现CNN-BiGRU-Attention多输入分类预测
分类预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出分类预测 目录 分类预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现CNN-BiGRU-Attention多特征分类预测,卷积双向门控循环…...
C#小轮子:Visual Studio自动编译Sass文件
文章目录 前言插件安装插件使用compilerconfig.jsonsass输入和css输出(自动生成)默认配置(我不懂就不去动他了) 解决Blazor热重载Bug 前言 我们知道css文件用起来太麻烦,如果样式一多,嵌套起来用css样式就…...
iOS字体像素与磅的对应关系
注意:低于iOS10的系统,显示的字宽和字高比高于iOS10的系统小。 这就是iOS10系统发布时,很多app显示的内容后面出现…,因而出现很多app为了适配iOS10系统而重新发布新版本。 用PS设计的iOS效果图中,字体是以像素&#x…...
阿里云ACP知识点
前言:记录ACP错题 1、在创建阿里云ECS时,每台服务器必须要包含_______用来存储操作系统和核心配置。 系统盘(不是实例,实例是一个虚拟的计算环境,由CPU、内存、系统盘和运行的操作系统组成;ESC实例作为云…...
小视频AI智能分析系统解决方案
2022下半年一个项目,我司研发一个基于接收小视频录像文件和图片进行算法分析抓拍的系统,整理了一下主要思想如下: 采用C开发一个AI识别服务,该服务具有如下功能: 创建各类算法模型服务引擎池,每类池内可加载多个模型…...
原神帧率解锁完整指南:5步突破60帧限制,体验丝滑游戏画面
原神帧率解锁完整指南:5步突破60帧限制,体验丝滑游戏画面 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 对于追求极致流畅游戏体验的《原神》玩家来说࿰…...
卡证检测模型自动化测试:Python脚本构建测试用例
卡证检测模型自动化测试:Python脚本构建测试用例 最近在部署一个卡证检测模型服务,上线前心里总有点不踏实。模型在开发环境跑得挺好,但真放到线上,面对各种五花八门的证件图片——光线暗的、角度歪的、背景杂乱的——它能扛得住…...
PaddleOCR模型选型避坑指南:从‘轻量级模型缺失文件’到‘通用模型实战’
PaddleOCR模型选型避坑指南:从轻量级到通用模型的实战解析 第一次接触PaddleOCR时,面对琳琅满目的模型选择,很多开发者都会陷入困惑:轻量级模型和通用模型到底有什么区别?为什么下载的轻量级模型总是提示缺少文件&…...
嵌入式开发新助手:Phi-4-mini-reasoning在STM32项目中的代码审查与优化
嵌入式开发新助手:Phi-4-mini-reasoning在STM32项目中的代码审查与优化 1. 嵌入式开发的痛点与机遇 在STM32这类资源受限的嵌入式开发中,工程师们常常面临一个两难困境:既要保证代码执行效率满足实时性要求,又要严格控制ROM和RA…...
如何轻松提取和编辑Unity游戏资源:UABEA工具完整指南
如何轻松提取和编辑Unity游戏资源:UABEA工具完整指南 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 你是否曾经遇到过这样的困扰?作为一名游戏开发者或模组制作者,…...
【书生·浦语】internlm2-chat-1.8b效果展示:中文诗歌创作+格律校验双能力
【书生浦语】internlm2-chat-1.8b效果展示:中文诗歌创作格律校验双能力 当AI不仅能写诗,还能自己检查格律——这才是真正的"诗人助手" 1. 模型简介:小而精的诗歌创作专家 InternLM2-Chat-1.8B虽然只有18亿参数,但在中文…...
Wan2.2-I2V-A14B Anaconda虚拟环境管理:隔离依赖与复现实验
Wan2.2-I2V-A14B Anaconda虚拟环境管理:隔离依赖与复现实验 1. 为什么需要虚拟环境 在AI项目开发中,依赖管理是个让人头疼的问题。想象一下这样的场景:你花了两周时间调试好的模型,换台机器就跑不起来了;或者更新了某…...
OpenClaw性能调优:Qwen3-14B镜像任务吞吐量提升300%实战
OpenClaw性能调优:Qwen3-14B镜像任务吞吐量提升300%实战 1. 问题背景与挑战 去年在尝试用OpenClaw对接本地部署的Qwen3-14B模型时,我发现一个尴尬的现象:当处理批量文件整理任务时,系统平均响应时间会从单任务的3秒暴增到20秒以…...
LFM2.5-1.2B-Thinking-GGUF在软件测试中的应用:自动化生成测试用例与代码审查
LFM2.5-1.2B-Thinking-GGUF在软件测试中的应用:自动化生成测试用例与代码审查 1. 引言:当AI遇上软件测试 "测试工程师80%的时间都在写重复的测试用例"——这个行业痛点正在被AI改变。想象一下,当你拿到一份需求文档,A…...
【回眸】系统读书笔记(十)盘点调动资源
目录 前言 资源盘点可以帮你创造选择 三类人生资源 直接价值资源 知识技能类:认知储备和实操能力、学科知识、行业认知、上手操作的技能 记录行为和结果:干成过什么、搞定过什么、负责过什么? 能力逆向推导:把行为翻译成资源…...
