责任链模式是将链中的每一个节点看作是一个对象,每个节点处理的请求不同,且内部自动维护一个下一节点对象。
当一个请求从链式的首段发出时,会沿着链的路径依此传递给每一个节点对象,直至有对象处理这个请求为止。
属于行为型模式。
1、定义处理器接口
1 2 3 4 5 6 7 8 9 | @Data @AllArgsConstructor @NoArgsConstructor @Builder public class Order { private Integer creditScore; private Integer quantity; } |
1 2 3 4 | public interface OrderHandler { boolean handle(Order order); } |
2、实现不同的校验处理器
信用校验处理器:
1 2 3 4 5 6 7 8 9 10 11 | @Component public class CreditHandler implements OrderHandler{ @Override public boolean handle(Order order) { if (order.getCreditScore() % 2 != 0 ){ System.out.println( "信用不足" ); return false ; } return true ; } } |
库存校验处理器:
1 2 3 4 5 6 7 8 9 10 11 | @Component public class StockHandler implements OrderHandler{ @Override public boolean handle(Order order) { if (order.getQuantity() > 20 ){ System.out.println( "库存不足" ); return false ; } return true ; } } |
3、责任链管理器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @Component public class OrderHandlerChain { private final List handlers; public OrderHandlerChain(List handlers){ this .handlers = handlers; } public boolean process(Order order){ for (OrderHandler handler : handlers) { if (!handler.handle(order)){ return false ; } } return true ; } } |
4、服务类调用责任链
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @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、测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @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多级校验内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!