首页电脑使用java责任链实现链式结构 java责任链开源代码

java责任链实现链式结构 java责任链开源代码

圆圆2025-06-11 18:01:15次浏览条评论

责任链模式在java中是一种行为设计模式,其核心是将请求的处理过程划分为多个独立步骤,每个步骤由一个处理器(handler)完成,这些处理器构成式链结构,请求沿着链调用协议被处理或到达结束。1.定义抽象处理类(handler),包含处理请求接口及指向下一个处理器的引用,并通过canhandlerequest和processre quest两个抽象方法判断是否处理请求及实际处理逻辑;2.创建具体处理类(如concretehandlera、concretehandlerb),继承handler并实现其抽象方法,分别负责特定类型请求;3.定义请求类(request),封装请求信息如类型;4.客户端代码构建责任链并发送请求,从链头开始传递至合适的处理器。安全中的过滤链是该模式的典型应用,通过多个过滤器依次处理http请求。优点包括降低连接度、增强灵活性和影响可扩展性,否则可能引发性能问题、调试困难及无法保证请求一定被处理。为避免链过长性能力,应确保处理器选择单一职责、优化逻辑、合适的起点、使用过滤器前置通用逻辑并进行短路优化。 责任链模式与策略模式的关键区别在于:上方中央多对象协作处理请求,中央算法动态替换;上方结构为链式传递控制权分散,上方结构为上下文控制权集中;先前适用于固定流程如机制,周日适用于策略切换如支付方式选择。

Java中责任链的用法_Java中责任链模式的使用

责任链模式在Java中,说白了就是让多个对象都有处理请求,避免请求发送者和接收者之间的关联。你可以把它想象成一个模拟,每个工人负责处理预设上的某个阶段,如果他能处理就处理,不能处理就换下一个机会工人。

责任链模式的核心是将请求的处理过程分解成一系列独立的步骤,每个步骤由一个处理器组成(handler)来完成。这些处理器构成一个链,请求沿着链提交,直到被某个处理器处理或者到达链的结束。

解决方案

立即学习“Java免费学习笔记(深入)”;

定义抽象处理类(Handler):

首先我们需要定义一个抽象的处理类,这个类定义了处理请求的接口,以及指向下一个处理器的引用。

public abstract class Handler { private Handler nextHandler; public Handler(Handler nextHandler) { this.nextHandler = nextHandler; } public void handleRequest(Request request) { if (canHandleRequest(request)) { processRequest(request); } else if (nextHandler != null) { nextHandler.handleRequest(request); } else { // 没有处理器可以处理该请求 System.out.println(quot;没有处理程序可以处理该请求: quot; request.getType()); } } // 抽象方法,判断是否可以处理请求 protected abstract boolean canHandleRequest(Request request); // 抽象方法,处理请求 protected abstract void processRequest(Request request);}登录后复制

这里handleRequest方法是整个责任链的核心,它首先判断当前处理器是否可以处理请求(通过canHandleRequest方法),如果就处理(通过processRequest方法),否则就可以将请求传递给下一个处理器。

创建具体处理类(具体) Handler):

接下来,我们需要创建具体的处理类,这些类继承自抽象处理类,并实现canHandleRequest和processRequest方法。

public class ConcreteHandlerA extends Handler { public ConcreteHandlerA(Handler nextHandler) { super(nextHandler); } @Override protected boolean canHandleRequest(Request request) { return request.getType().equals(quot;Aquot;); } @Override protected void processRequest(Request request) { System.out.println(quot;ConcreteHandlerA 正在处理请求: quot; request.getType()); }}public class ConcreteHandlerB extends Handler { public ConcreteHandlerB(Handler nextHandler) { super(nextHandler); } @Override protected boolean canHandleRequest(Request request) { return request.getType().equals(quot;Bquot;); } @Override protected void processRequest(Request request) { System.out.println(quot;ConcreteHandlerB 正在处理请求: quot; request.getType()); }}登录后复制

每个具体处理类负责处理特定类型的请求。例如,ConcreteHandlerA只处理类型为“A”的请求,ConcreteHandlerB只处理类型为“B”的请求。

创建请求类(Request):

我们需要定义一个请求类,该类包含了请求的信息,例如请求类型。public class Request { private String type; public Request(String type) { this.type = type; } public String getType() { return type; }}登录后复制

客户端代码:

最后,我们需要编写客户端代码,创建责任链,并发送请求。

public class Client { public static void main(String[] args) { // 责任链 Handler handlerA = new ConcreteHandlerA(null); // 最后一个处理器可以为 null Handler handlerB = new ConcreteHandlerB(handlerA); // B 处理不行就相当于A // Request 请求 requestA = new Request(quot;Aquot;); Request requestB = new Request(quot;Bquot;); Request requestC = new Request(quot;Cquot;); // 发送请求handlerB.handleRequest(requestA); // 从链的头部开始 handlerB.handleRequest(requestB); handlerB.handleRequest(requestC); }}登录后复制

客户端代码首先创建责任链,然后创建请求,最后将请求发送给责任链的头部。注意,请求是从链的头部开始传递的。

链责任模式在Spring Security中的应用

Spring安全大量使用了责任链模式,它通过一系列的过滤器(Filter)来处理HTTP请求,每个过滤器身份负责执行特定的安全任务,例如验证、授权、防止跨站脚本攻击等。这些过滤器构成一个FilterChain,请求依次经过这些过滤器,被直到处理到FilterChain的结束。安全的FilterChain就是责任链模式的一个典型应用。

责任链模式的优点

优点:降低耦合度:请求发送者不需要知道哪个处理器会处理请求。灵活:可以轻松动态地添加或删除处理器。扩展:可以很容易地添加新的处理器来处理新的请求类型。

缺陷:性能问题:如果责任链很长,请求的处理时间可能会很长。调试困难:由于请求在链中提交,调试起来可能会比较困难。不能保证处理:不能保证请求一定会被处理,如果链中没有处理器可以处理请求,请求就会被丢弃。

如何避免责任链过长,影响性能?

职责明确,避免过度设计: 责任链上的每个处理器应该职责,单一考虑一个处理器承担过多的任务。如果一个处理器需要处理多种类型的请求,可以考虑将其分割成多个处理器。

优化处理器逻辑:确保每个处理器的处理逻辑避免避免。在处理器中执行运行的操作,例如数据库、网络请求等。如果必须执行中断操作,可以使用同步、异步处理等技术来优化性能。

选择合适的责任链起点:根据请求的类型,选择合适的责任链起点。例如,如果大部分请求都需要经过某个处理器处理,可以将处理器放在责任链的头部。

使用过滤器:对于一些通用的处理逻辑,例如日志记录、性能监控等,可以使用过滤器来实现。

过滤器可以在请求到达服务链或之后执行,可以减少之前服务链的长度。

短路优化:在某些情况下,可以根据请求的特征某些,提前判断请求是否需要经过某个处理器处理。如果不需要,可以直接跳过该处理器,从而减少责任链的长度。

责任链模式和策略模式的区别是什么?

责任链模式和策略模式都是存在行为类型模式,它们都用于处理不同的算法或策略。但它们之间有一些关键的区别:目的不同:结构不同: 责任链模式由一系列的处理器组成,每个处理器负责处理请求的一部分,而策略模式由一个上下文对象和多个策略对象组成,上下文对象负责选择合适的策略对象来执行。控制权不同:在责任链模式中,请求的处理过程由责任链中的处理器决定,请求会沿着链提交,直到被选择某个处理器处理或者到达链的结束。而在策略模式中,上下文对象负责合适的策略对象来执行,控制权在上下文对象手中。应用不同场景: 责任链模式适用于处理流程固定的场景,例如语法流程、事件处理等。策略模式适用于算法或策略需要动态变化的场景,例如支付方式选择、排序算法选择等。

总之,责任链模式专注于将请求的处理过程分解成一系列独立的步骤,每个步骤由一个处组成理器来完成,而策略模式集中于封装不同的算法或策略,整理它们可以相互替换。根据具体的应用场景选择哪种模式。

以上就是Java中责任链的优化_Java中责任链模式的使用的详细内容,更多请关注乐哥常识网其他相关文章!

Java中责任链的用
debian如何安装 debian linux安装教程
相关内容
发表评论

游客 回复需填写必要信息