Java设计模式8,校验、审批流程改善神器,责任链模式

在这里插入图片描述

一、责任链模式

最近在做一个数据校验的功能,需要校验的东西很多,有的从数据库中查询,有的是固定的数值校验,有的是数据类型校验, 如果通过ifelse来写,也是没问题的。
但,为了代码的优雅和可扩展性,我选择尝试一下责任链模式,责任链模式的核心是解决一组服务中的先后执行处理关系

责任链模式(Chain of Responsibility Pattern)是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。属于行为型模式。

二、责任链模式的优缺点

1、优点

  1. 减少大量ifelse;
  2. 逻辑清晰明了,添加删除节点、改变节点顺序方便快捷;
  3. 请求与处理解耦;
  4. 请求处理者只需关注自己感兴趣的请求,对于不感兴趣的请求,直接转发给下一级节点对象;
  5. 易于扩展新的请求处理类,符合开闭原则;

2、缺点

  1. 责任链太长或处理时间过长,会影响整体性能。
  2. 如果需要判断的东西较多,容易造成类保证;
  3. 如果每个判断
  • 76
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 73
    评论
责任链设计模式是一种行为型设计模式,它通过将请求的发送者和接收者解耦,使多个对象都有机会处理该请求。在责任链模式中,每个对象都包含一个对下一个对象的引用,形成一个链条。当请求从链条的头部进入时,每个对象依次判断是否能够处理该请求,如果能够处理则处理,否则将请求传递给下一个对象。 在Java中,可以使用责任链模式来实现一些具有类似处理流程的场景,例如日志记录、权限校验、异常处理等。 以下是一个简单的Java代码示例,用于演示责任链设计模式的实现: ```java // 定义一个抽象处理器 abstract class Handler { protected Handler successor; // 后继处理器 public void setSuccessor(Handler successor) { this.successor = successor; } public abstract void handleRequest(Request request); } // 具体处理器A class ConcreteHandlerA extends Handler { @Override public void handleRequest(Request request) { if (request.getLevel() <= 10) { // 根据请求的级别判断是否能够处理 System.out.println("ConcreteHandlerA 处理了请求:" + request.getContent()); } else if (successor != null) { successor.handleRequest(request); // 不能处理则传递给下一个处理器 } } } // 具体处理器B class ConcreteHandlerB extends Handler { @Override public void handleRequest(Request request) { if (request.getLevel() > 10 && request.getLevel() <= 20) { System.out.println("ConcreteHandlerB 处理了请求:" + request.getContent()); } else if (successor != null) { successor.handleRequest(request); } } } // 请求类 class Request { private int level; // 请求级别 private String content; // 请求内容 public Request(int level, String content) { this.level = level; this.content = content; } public int getLevel() { return level; } public String getContent() { return content; } } // 客户端代码 public class Client { public static void main(String[] args) { Handler handlerA = new ConcreteHandlerA(); Handler handlerB = new ConcreteHandlerB(); handlerA.setSuccessor(handlerB); Request request1 = new Request(5, "低级请求"); Request request2 = new Request(15, "中级请求"); Request request3 = new Request(25, "高级请求"); handlerA.handleRequest(request1); handlerA.handleRequest(request2); handlerA.handleRequest(request3); } } ``` 输出结果: ``` ConcreteHandlerA 处理了请求:低级请求 ConcreteHandlerB 处理了请求:中级请求 ``` 在上述代码中,`Handler` 是抽象处理器类,`ConcreteHandlerA` 和 `ConcreteHandlerB` 是具体处理器类,`Request` 是请求类。在客户端代码中,我们创建了两个具体处理器对象,并通过 `setSuccessor()` 方法将它们链接在一起形成一个责任链。最后,我们创建了三个请求对象,依次调用 `handleRequest()` 方法,责任链会按照定义的处理逻辑逐个处理请求。
评论 73
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值