JAVA笔记 | 实际上用到的策略模式(可直接套用)

ops/2024/12/22 14:30:31/

自己开发中用到了策略模式,这样写不一定是最好的,但是满足了业务场景跟使用要求,做个笔记,下次有用到可以快速复习跟套用

假设使用场景:有几只宠物,猫跟狗等,要求他们做各种动作,比如叫,跑等,但是作为宠物这些都是相同的动作,只是猫,狗具体的表现不同,比如猫叫是喵,狗叫是汪

1.创建基础策略接口PetStrategy

java">public interface PetStrategy {//类型 cat-猫,dog-狗String getType();//执行动作 1 - 叫barkString bark();//执行动作 2 - 跑RUN 带参数例子String run(String name);
}

2.创建实现PetStrategy接口的猫CatStrategy跟狗DogStrategy用于实现具体的表现

注意加上@Service

java">//猫实现类
@Service
public class CatStrategy implements PetStrategy{@Overridepublic String getType() {return "cat";}@Overridepublic String bark() {return "猫叫喵喵喵";}@Overridepublic String run(String name) {return name + "猫跑了";}
}//狗实现类
@Service
public class DogStrategy implements PetStrategy{@Overridepublic String getType() {return "dog";}@Overridepublic String bark() {return "狗叫汪汪汪";}@Overridepublic String run(String name) {return name + "狗跑了";}
}

3.创建统一策略入口,即不同宠物类型type进来进行分配对应的策略

java">public interface PetStrategyHandler {//宠物叫行为String bark(String type);//宠物跑行为-带入参String run(String type,String name);
}

4.创建入口配置类,接收入口传来的type,用于实际分配不同的策略,类似工厂

java">@Configuration
public class PetStrategyConfig {@Beanpublic PetStrategyHandler petHandler(List<PetStrategy> strategies) {Map<String, PetStrategy> strategyMap = strategies.stream().collect(Collectors.toMap(PetStrategy::getType, item -> item));PetStrategyHandler handler = new PetStrategyHandler() {@Overridepublic String bark(String type) {return strategyMap.get(type).bark();}@Overridepublic String run(String type,String name) {return strategyMap.get(type).run(name);}};return handler;}
}

 5.创建controller测试

java">@RestController
@RequestMapping("/pet")
public class PetController {@Resourceprivate PetStrategyHandler handler;@GetMapping("/bark/{type}")public String bark(@PathVariable String type){return this.handler.bark(type);}@GetMapping("/run/{type}")public String run(@PathVariable String type,@RequestParam String name){return this.handler.run(type,name);}
}

这样后续如果有新的动物,只需增加新的xxStrategy跟传对应type就好,策略模式替换if的好处不是百分百的,具体看实现要求吧,各有优缺点


http://www.ppmy.cn/ops/117647.html

相关文章

9.26号算法题

数组的遍历 414.第三大的数 题解&#xff1a; class Solution {public int thirdMax(int[] nums) {TreeSet<Integer>treeSet new TreeSet<Integer>(); //生成一个TreeSet对象&#xff0c;存储有序唯一整数for (int num : nums){//遍历数组treeSet.add(num);//将…

Javascript教程

JavaScript Tutorial 教程&#xff1a;Grammar and types - JavaScript | MDN 练习&#xff1a;https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/ The Modern JavaScript Tutorial

网安面试题1

深信服厂商面 自我介绍 我看到你介绍里面有提到独立设计网络拓扑图&#xff0c;你知道内网有哪些攻击途径吗 护网红队有什么成果 sql注入有哪些类型 sql注入的防御方式 讲一个你工作中遇到的应急响应 怎么判断内网的攻击是不是真实攻击 Windows中了勒索病毒你应该怎么办 linux被…

MySQL_表_进阶(2/2)

上一章我们谈了排序子句&#xff0c;使用ORDER BY 字段 DESC/ASC。以及左右连接的多关系查询。 今天&#xff0c;没错&#xff0c;四张表最后两个需求 ✨涉及聚合函数查询与指定别名 四张表&#xff1a; 学院表&#xff1a;(testdb.dept) 课程表&#xff1a;(testdb.course) 选…

记某地级市护网的攻防演练行动

0x1 前言 哈喽&#xff0c;师傅们&#xff01; 这次给师傅们分享的是上上个星期的地级市护网的攻防演练的两个案例&#xff0c;涉及到的知识点可能比较偏&#xff0c;下面我也会提前给师傅们拓展下改漏洞相关的知识点内容。护网攻防演练中&#xff0c;涉及到的很多敏感内容这…

C语言贪吃蛇小游戏演示和说明

C语言贪吃蛇小游戏演示和说明 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础&#xff0c;训练编程思维&#xff0c;培养解决问题的思路&#xff0c;领略多姿多彩的C语言。 游戏开始后&#xff0c;会在中间位置出现一条只有三个节点的贪吃蛇&#xff0c;并随机出现一个食物&am…

探索 TensorFlow:构建强大的机器学习模型

探索 TensorFlow&#xff1a;构建强大的机器学习模型 TensorFlow&#xff0c;由Google开发并维护&#xff0c;是一个开源的机器学习库&#xff0c;广泛用于深度学习研究和生产。它提供了丰富的API和工具&#xff0c;使得构建、训练和部署复杂的机器学习模型变得简单而高效。在…

通过 LabVIEW 正则表达式读取数值(整数或小数)

在LabVIEW开发中&#xff0c;字符串处理是一个非常常见的需求&#xff0c;尤其是在处理包含复杂格式的数字时。本文通过一个具体的例子来说明如何利用 Match Regular Expression Function 和 Match Pattern Function 读取并解析字符串中的数字&#xff0c;并重点探讨这两个函数…