设计模式学习

devtools/2024/9/20 1:15:20/ 标签: 设计模式, 学习

设计模式学习

设计模式学习

策略模式

策略模式适用于以下场景:

  1. 对象有多种行为或算法,需要根据不同情况选择不同的算法。
  2. 系统中有多个类实现相同的接口或继承相同的抽象类,但具体实现不同。
  3. 需要在运行时动态地添加、删除或切换算法,而不影响客户端代码。
  4. 一个类有多种变形或状态,每个状态有不同的行为,需要根据状态动态改变对象的行为。

第一步:定义策略接口

/*** 打游戏策略接口* 策略接口定义行为* @author wangpeng* @ClassName PlayGameStategy* @description* @date 2024/4/24 16:39*/
public interface PlayGameStategy {/*** 打游戏* @return*/String playGame();
}

第二步:定义上下文类

/*** 上下文* @author wangpeng* @ClassName PlayGameContext* @date 2024/4/24 16:40*/public class PlayGameContext {private PlayGameStategy playGameStategy;public PlayGameContext(PlayGameStategy playGameStategy) {this.playGameStategy = playGameStategy;}public String playGame() {return playGameStategy.playGame();}}

第三步:创建要打的游戏类,LOL、Pubg

/*** @author wangpeng* @ClassName Pubg* @description TODO* @date 2024/4/24 16:43*/public class Lol implements PlayGameStategy {@Overridepublic String playGame() {return "LoL启动!";}
}

/*** @author wangpeng* @ClassName Pubg* @description TODO* @date 2024/4/24 16:43*/public class Pubg implements PlayGameStategy {@Overridepublic String playGame() {return "pubg启动!";}
}

第四步:调用

/*** @author wangpeng* @ClassName TestController* @description TODO* @date 2024/4/24 16:44*/
@RestController
@RequestMapping("/test")
public class FuckController {@GetMapping("/pubg")@Anonymouspublic String playPubg(String game) {Pubg pubg = new Pubg();PlayGameContext playGameContext = new PlayGameContext(pubg);return  playGameContext.playGame();}@GetMapping("/lol")@Anonymouspublic String playLoL(String game) {Lol lol = new Lol();PlayGameContext playGameContext = new PlayGameContext(lol);return playGameContext.playGame();}
}

最后效果
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/devtools/15978.html

相关文章

《LeetCode力扣练习》代码随想录——回溯算法(递增子序列---Java)

《LeetCode力扣练习》代码随想录——回溯算法&#xff08;递增子序列—Java&#xff09; 刷题思路来源于 代码随想录 491. 非递减子序列 回溯 class Solution {private List<Integer> path new ArrayList<>();private List<List<Integer>> result ne…

C#中=> “Lambda运算符”

在C#中&#xff0c;> 符号被称为“Lambda运算符”或“Lambda箭头”。它用于连接Lambda表达式中的参数列表和表达式主体&#xff0c;表示函数的输入和输出关系。因此&#xff0c;Lambda运算符充当了将参数映射到表达式的箭头。 Lambda运算符的左侧是参数列表&#xff0c;它们…

前端模块化整理汇总

AMD 异步加载&#xff0c;依赖前置&#xff0c;前置依赖建议写在前引用&#xff0c;在所有模块加载完成后立即执行回调函数&#xff0c;用户体验好&#xff0c;不容易造成卡顿 需要引用require.js //math.js define([], function () {function add(a, b) {return a b;}retur…

数据可视化(七):Pandas香港酒店数据高级分析,涉及相关系数,协方差,数据离散化,透视表等精美可视化展示

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

revit\navisworks各种安装问题

You have entered a nonvalid serial number &#xff0c;怎么都不给你一个机会输出序列号&#xff0c;怎么办&#xff1f; step1: C:\Program Files (x86)\Common Files\Autodesk Shared\AdskLicensing目录下找到uninstall.exe&#xff0c;右键管理员模式运行&#xff0c;会…

基于CANoe从零创建以太网诊断工程(3)—— Port Configuration 选项

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

蓝桥杯python考级整理

4_1:算术运算符 4_2:基本语法 4_3:基本语法 4_4:列表 4_5:函数 4_6:字符串 4_7:列表 4_8:逻辑运算符 4_9:字典 4_10:函数

mybatis映射postgres数据库的geometry类型

mybatis映射postgres数据库的geometry类型 文章目录 mybatis映射postgres数据库的geometry类型一、问题背景和需求描述二、解决步骤1、导入java类型转换需要的包2、自定义mybatis类型转换器(GeometryTypeHandler)3、注册类型转换器(springBoot项目)4、在实体类添加类型转换器…

Java中使用Graphics2D绘制字符串文本自动换行 算法

效果&#xff1a; 代码&#xff1a; /*** return void* Author xia* Description //TODO 写字换行算法* Date 18:08 2021/4/1* Param []**/private static void drawWordAndLineFeed(Graphics2D g2d, Font font, String words, int wordsX, int wordsY, int wordsWidth) {FontD…

【堆】Leetcode 347. 前 K 个高频元素【中等】

前 K 个高频元素 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 解题思路 1、使用哈希表来统计数组中每个元素的出现频率。2、使用最小堆&…

数组、链表、集合、table、map、二叉树、索引、数据库

数据结构&#xff1a;帮助数据快速读写的一种结构模型&#xff0c;数据库是 系统文件索引&#xff08;索引是各种数据结构提高数据检索以平衡数据读写速度&#xff0c;系统文件是存储用户真正的数据&#xff0c;比如业务表数据、文件、图片等等&#xff09; 1.数组&#xff1a…

前端数字计算精度问题

计算精度问题通常发生在浮点数运算中&#xff0c;由于浮点数的表示所限&#xff0c;可能导致精度损失。 举例 // 比如 0.1 0.2 // 结果为 0.30000000000000004 0.3 - 0.1 // 结果为 0.19999999999999996vue vue 使用decimal.js 解决小数相加合计精确度丢失问题 微信小程序 …

华纳云:怎么防止租用服务器的数据丢失?

要防止租用服务器上的数据丢失&#xff0c;可以采取以下一些措施&#xff1a; 定期备份数据&#xff1a;建立定期备份数据的机制&#xff0c;将重要数据备份到安全的地方&#xff0c;例如云存储服务、外部硬盘或者另一个服务器上。备份频率可以根据数据的重要性和变动频率来确定…

S32K的JLINK与PE接线方法与刷程序失败问题

S32K的JLINK与PE接线方法与刷程序失败问题 1、PE的接线方法2、JLINK的接线方法3、刷程序失败问题 1、PE的接线方法 2、JLINK的接线方法 3、刷程序失败问题 出现如下问题&#xff1a; Secure Debug might be enabled on this device.lf so.please unlock the device via PEmic…

【STM32HAL库】外部中断

目录 一、中断简介 二、NVIC 1.寄存器 2.工作原理 3.优先级 4.使用NVIC 三、EXTI 1.简介 2.AFIO&#xff1a;复用功能IO&#xff0c;主要用于重映射和外部中断映射配置​编辑 3. 中断使用 4.HAL库配置使用 一、中断简介 中断的意义&#xff1a;高效处理紧急程序&#xff0c;不会…

2021年全国大学生电子设计竞赛D题——基于互联网的摄像测量系统(二)

09 电路设计 前面介绍了系统的硬件框图如下&#xff1a; 硬件基本分为三块&#xff0c;两个摄像节点&#xff0c;一个终端节点。 1. 摄像节点硬件 摄像节点由一个DE10-Nano开发板和一个D8M摄像头实现&#xff0c;DE10-Nano开发板的HDMI接口外接HDMI显示器来显示拍摄到的视频。…

尺取法知识点讲解

一、固定长度的情况&#xff1a; 最小和(sum) 输入N个数的数列&#xff0c;所有相邻的M个数的和共有N-M1个&#xff0c;求其中的最小值。 输入格式 第1行&#xff0c;2个整数N&#xff0c;M&#xff0c;范围在[3…100000]&#xff0c;N>M。 第2行&#xff0c;有N个正…

Python学习从0开始——项目一day02数据库连接

Python学习从0开始——项目一day02数据库连接 一、在线云数据库二、测试数据库连接三、数据库驱动介绍四、SQL执行4.1插入测试数据4.2安装数据库连接模块4.3测试SQL语句执行4.4执行SQL的固定步骤及示例 一、在线云数据库 找了一个在线数据库&#xff0c;需要邮箱注册&#xff…

Qt——QString 只保留数字

在Qt中&#xff0c;如果你想从一个QString对象中只保留数字&#xff0c;可以使用QString::remove()函数结合一个正则表达式来实现。正则表达式可以用来匹配那些你想要从字符串中移除的字符&#xff0c;例如非数字字符。 以下是一个示例代码&#xff0c;展示如何从一个字符串中…

如何在阿里云快速配置自动定时重启ECS云服务器?

背景 无论是电子商务、在线教育、游戏&#xff0c;还是流媒体等业务&#xff0c;服务器的稳定运行都是至关重要的。然而&#xff0c;在实际运行中&#xff0c;我们可能会遇到这样一些场景&#xff1a; 系统更新&#xff1a;一些操作系统或者软件的更新可能需要重启服务器才能…