当前位置: 首页 > article >正文

Spring boot 策略模式

public abstract class Node {/*** 执行** @param a* @param b* @return*/public abstract Integer execute(int a, int b);
}
package my.node;import org.springframework.stereotype.Component;@Component("exec")
public class ExecNode extends Node {@Overridepublic Integer execute(int a, int b) {return a + b;}
}
package my.node;import org.springframework.stereotype.Component;@Component("todo")
public class TodoNode extends Node {@Overridepublic Integer execute(int a, int b) {return a + b;}
}

工厂

package my;import my.node.Node;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.Map;
import java.util.Optional;@Component
public class NodeFactory {/*** Spring会自动将Strategy接口的实现类注入到这个Map中,key为bean id,value值则为对应的策略实现类*/@Autowiredprivate Map<String, Node> nodeMap;/*** 获取相应的节点** @param nodeName* @return*/public Node getNode(String nodeName) {Node targetNode = Optional.ofNullable(nodeMap.get(nodeName)).orElseThrow(() -> new IllegalArgumentException("Invalid Operator"));return targetNode;}
}

使用

package my;import my.node.Node;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MyApplication.class)
@WebAppConfiguration
public class CommandFactoryTest {@Autowiredprivate NodeFactory nodeFactory;@Testpublic void execute() throws Exception {Node node = nodeFactory.getNode("exec");}}

http://www.lryc.cn/news/2396568.html

相关文章:

  • websocket在vue中的使用步骤,以及实现聊天
  • C++学习-入门到精通【12】文件处理
  • 第十一篇:MySQL 在分布式系统中的一致性保障与中间件实践
  • Java中如何枚举正则表达式捕获组的名字
  • matlab实现图像压缩编码
  • 如何排查Redis单个Key命中率骤降?
  • 记一次 Starrocks be 内存异常宕机
  • Spring Boot 读取.env文件获取配置
  • LangChain-结合GLM+SQL+函数调用实现数据库查询(一)
  • python训练营打卡第41天
  • 1.3HarmonyOS NEXT统一开发范式与跨端适配:开启高效跨设备应用开发新时代
  • 麒麟v10,arm64架构,编译安装Qt5.12.8
  • ArcGIS Pro 3.4 二次开发 - 布局
  • 基于随机函数链接神经网络(RVFL)的锂电池健康状态(SOH)预测
  • 爱其实很简单
  • 2025年渗透测试面试题总结-匿名[校招]安全工程师(甲方)(题目+回答)
  • PySide6 GUI 学习笔记——常用类及控件使用方法(地址类QUrl)
  • 任务23:创建天气信息大屏Django项目
  • 数学分析——一致性(均匀性)和收敛
  • Flutter GridView网格组件
  • 【深度学习】18. 生成模型:Variational Auto-Encoder(VAE)详解
  • NodeJS全栈开发面试题讲解——P6安全与鉴权
  • C# 密封类和密封方法
  • 为什么badmin reconfig以后始终不能提交任务
  • 解决Window10上IP映射重启失效的问题
  • 力扣刷题(第四十四天)
  • MyBatis-Plus高级用法:最优化持久层开发
  • c++之循环
  • python h5py 读取mat文件的<HDF5 object reference> 问题
  • linux命令 systemctl 和 supervisord 区别及用法解读