springboot责任链模式实现多级校验

 更新时间:2024年11月22日 10:19:41   作者:你知道烟火吗  
责任链模式是将链中的每一个节点看作是一个对象,每个节点处理的请求不同,且内部自动维护一个下一节点对象,下面我们来聊聊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常见面试题之多线程和高并发详解

    Java常见面试题之多线程和高并发详解

    这篇文章主要给大家介绍了关于Java面试题之多线程和高并发的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • 详细说明关于Java的数据库连接(JDBC)

    详细说明关于Java的数据库连接(JDBC)

    这篇文章主要介绍了详细说明关于Java的数据库连接JDBC,JDBC是用Java语言向数据库发送SQL语句,需要的朋友可以参考下面文章内容
    2021-09-09
  • 如何获得spring上下文的方法总结

    如何获得spring上下文的方法总结

    这篇文章主要介绍了如何获得spring上下文的方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java通过反射将 Excel 解析成对象集合实例

    Java通过反射将 Excel 解析成对象集合实例

    这篇文章主要介绍了Java通过反射将 Excel 解析成对象集合实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Spring编程式和声明式事务实例讲解小结

    Spring编程式和声明式事务实例讲解小结

    这篇文章主要介绍了Spring编程式和声明式事务实例讲解小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Java中的split使用方法详解

    Java中的split使用方法详解

    这篇文章主要介绍了Java中的split使用方法详解,Java 中 String 的 split 方法可以将字符串根据指定的间隔进行切割,经过切割后得到的返回值是一个字符串数组,需要的朋友可以参考下
    2023-10-10
  • Logger.getLogger()与LogFactory.getLog()的区别详解

    Logger.getLogger()与LogFactory.getLog()的区别详解

    LogFactory来自common-logging包。如果用LogFactory.getLog,你可以用任何实现了通用日志接口的日志记录器替换log4j,而程序不受影响
    2013-09-09
  • maven 离线模式打包的实现示例

    maven 离线模式打包的实现示例

    本文主要介绍了在不使用外网的情况下进行离线打包,步骤包括删除远程仓库文件、打包本地依赖、修改Maven配置文件并执行命令,具有一定的参考价值,感兴趣的可以了解一下
    2026-01-01
  • 为什么不建议使用Java自定义Object作为HashMap的key

    为什么不建议使用Java自定义Object作为HashMap的key

    这篇文章主要介绍了为什么不建议使用Java自定义Object作为HashMap的key,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06
  • Java枚举与.net枚举区别详解

    Java枚举与.net枚举区别详解

    这篇文章主要介绍了Java枚举与.net枚举区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论