责任链模式实战:gh_mirrors/des/DesignPatterns中的权限校验实现

【免费下载链接】DesignPatterns 经典设计模式讲解以及项目实战(Java版) 【免费下载链接】DesignPatterns 项目地址: https://gitcode.com/gh_mirrors/des/DesignPatterns

责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行发送,直到其中一个处理者处理该请求。在gh_mirrors/des/DesignPatterns项目中,责任链模式被广泛应用于权限校验、数据验证等场景,提供了灵活且可扩展的请求处理机制。

什么是责任链模式?

责任链模式(Chain of Responsibility Pattern)通过将请求的发送者和接收者解耦,让多个对象都有机会处理请求。请求沿着一条链传递,直到有一个对象处理它为止。这种模式非常适合实现多级审批、权限校验、日志记录等场景。

责任链模式核心架构 图:责任链模式在项目中的核心架构实现,展示了KeyIdentificationChain的组合查询流程

责任链模式的核心组件

在gh_mirrors/des/DesignPatterns项目中,责任链模式主要包含以下核心组件:

  1. 抽象处理者(Handler):定义处理请求的接口,通常包含一个指向下一个处理者的引用
  2. 具体处理者(Concrete Handler):实现处理请求的具体逻辑,如果不能处理则传递给下一个处理者
  3. 客户端(Client):创建处理链并提交请求

权限校验中的责任链实现

项目中最典型的责任链模式应用是权限校验模块,位于design-patterns-basic/src/main/java/org/landy/chain/responsibility/demo4/CheckAuthority.java文件中。

这个实现模拟了企业中的多级审批流程,其中:

  • Manager(经理)可以批准5000美元以下的支出
  • Director(总监)可以批准10000美元以下的支出
  • Vice President(副总裁)可以批准20000美元以下的支出
  • President(总裁)可以批准30000美元以下的支出

责任链的构建过程

// 构建责任链:Manager -> Director -> Vice President -> President
ManagerPPower manager = new ManagerPPower();
DirectorPPower director = new DirectorPPower();
VicePresidentPPower vp = new VicePresidentPPower();
PresidentPPower president = new PresidentPPower();
manager.setSuccessor(director);
director.setSuccessor(vp);
vp.setSuccessor(president);

请求处理逻辑

每个处理者实现了统一的处理接口:

public void processRequest(PurchaseRequest request) {
    if (request.getAmount() < this.getAllowable()) {
        System.out.println(this.getRole() + " will approve $" + request.getAmount());
    } else if (successor != null) {
        successor.processRequest(request);
    }
}

责任链模式的实际应用场景

除了权限校验外,项目中还在多个模块应用了责任链模式:

1. 数据验证责任链

在请求验证模块中,多个验证器形成了一条验证链,对输入数据进行多维度校验:

请求验证责任链 图:请求验证责任链的水平架构图,展示了多种Validator的协同工作方式

相关实现位于design-patterns-business/src/main/java/org/landy/business/validation/目录下,包含:

  • ValidatorChain:管理验证器链
  • AbstractValidatorHandler:验证处理器抽象类
  • 多种具体验证器:如SystemSourceValidator、RowNumberValidator等

2. 核心识别责任链

在design-patterns-business/src/main/java/org/landy/business/identify/primary/目录中,实现了用于数据识别的责任链:

  • DefaultKeyIdentificationChain:默认的关键字识别链
  • KeyIdentification:关键字识别接口
  • 多种具体识别实现类

责任链模式的优势与注意事项

优势:

  • 解耦请求发送者和接收者:发送者无需知道哪个对象处理请求
  • 灵活性:可以动态改变链中的处理者或调整其顺序
  • 可扩展性:新增处理者无需修改现有代码,符合开闭原则

注意事项:

  • 避免过长的责任链,可能导致性能问题
  • 确保链中总有一个处理者能够处理请求,避免请求无人处理
  • 适当设置链的中断条件,避免不必要的处理

如何在项目中使用责任链模式

  1. 克隆项目:git clone https://gitcode.com/gh_mirrors/des/DesignPatterns
  2. 查看权限校验示例:CheckAuthority.java
  3. 研究验证责任链实现:ValidatorChain.java

通过学习gh_mirrors/des/DesignPatterns项目中的责任链模式实现,你可以掌握如何在实际项目中应用这一设计模式,构建灵活、可扩展的请求处理系统。无论是权限校验、数据验证还是业务流程审批,责任链模式都能提供优雅的解决方案。

【免费下载链接】DesignPatterns 经典设计模式讲解以及项目实战(Java版) 【免费下载链接】DesignPatterns 项目地址: https://gitcode.com/gh_mirrors/des/DesignPatterns

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐