springboot责任链模式实现多级校验
责任链模式是将链中的每一个节点看作是一个对象,每个节点处理的请求不同,且内部自动维护一个下一节点对象。
当一个请求从链式的首段发出时,会沿着链的路径依此传递给每一个节点对象,直至有对象处理这个请求为止。
属于行为型模式。
1、定义处理器接口
@Data @AllArgsConstructor @NoArgsConstructor @Builder public class Order { private Integer creditScore; private Integer quantity; }
public interface OrderHandler { boolean handle(Order order); }
2、实现不同的校验处理器
信用校验处理器:
@Component public class CreditHandler implements OrderHandler{ @Override public boolean handle(Order order) { if (order.getCreditScore() % 2 != 0){ System.out.println("信用不足"); return false; } return true; } }
库存校验处理器:
@Component public class StockHandler implements OrderHandler{ @Override public boolean handle(Order order) { if (order.getQuantity() > 20){ System.out.println("库存不足"); return false; } return true; } }
3、责任链管理器
@Component public class OrderHandlerChain { private final List<OrderHandler> handlers; public OrderHandlerChain(List<OrderHandler> handlers){ this.handlers = handlers; } public boolean process(Order order){ for (OrderHandler handler : handlers) { if (!handler.handle(order)){ return false; } } return true; } }
4、服务类调用责任链
@Component public class OrderService { private final OrderHandlerChain handlerChain; private OrderService(OrderHandlerChain handlerChain){ this.handlerChain = handlerChain; } public boolean processOrder(Order order){ boolean process = handlerChain.process(order); if (process){ System.out.println("校验成功"); } return process; } }
5、测试
@SpringBootTest public class OrderServiceTest { @Autowired private OrderService orderService; @Test public void testOrderProcess(){ Order order = new Order(2, 5); orderService.processOrder(order); Order order1 = new Order(2, 5); orderService.processOrder(order1); Order order2 = new Order(2, 21); orderService.processOrder(order2); } }
6、优点
解耦逻辑:每个校验逻辑独立实现,符合单一职责原则
灵活扩展:新增校验只需添加新的Handler实现类,无需修改现有代码
支持动态调整:可通过调整List的顺序来改变校验顺序
利用Spring自动装配:使用Spring的依赖注入简化责任链构建
到此这篇关于springboot责任链模式实现多级校验的文章就介绍到这了,更多相关springboot多级校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java持久化框架Hibernate与Mybatis优劣及选择详解
这篇文章主要介绍了Java持久化框架Hibernate与Mybatis优劣及选择详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-05-05idea创建springboot项目,Application.java不能运行问题及解决
这篇文章主要介绍了idea创建springboot项目,Application.java不能运行问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-11-11SpringBoot整合Echarts绘制静态数据柱状图和饼图
这篇文章给大家介绍了SpringBoot整合Echarts绘制静态数据柱状图和饼图,文中通过代码示例给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下2024-03-03剑指Offer之Java算法习题精讲数组与列表的查找及字符串转换
跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化2022-03-03SpringBoot实现WebSocket全双工通信的项目实践
本文主要介绍了SpringBoot实现WebSocket全双工通信的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-05-05
最新评论