农产品网站管理员怎么做猎头公司收费标准
农产品网站管理员怎么做,猎头公司收费标准,wordpress 火车头 教程,如何欣赏网站责任链设计模式详解
一、定义
责任链设计模式#xff08;Chain of Responsibility Pattern#xff09;是一种行为设计模式#xff0c;它允许多个对象有机会处理请求#xff0c;从而避免请求的发送者和接收者之间的耦合。这种模式将这些对象连接成一条链#xff0c;并沿着…责任链设计模式详解
一、定义
责任链设计模式Chain of Responsibility Pattern是一种行为设计模式它允许多个对象有机会处理请求从而避免请求的发送者和接收者之间的耦合。这种模式将这些对象连接成一条链并沿着这条链传递请求直到有一个对象处理它为止。 就是说每个结点会处理一件事情如果结点间出现异常那么链路就会中断。
二、责任链的主要结构
主要结构
责任链模式的核心结构可以分为以下几个部分
抽象处理者Handler 定义一个处理请求的接口通常是一个抽象类包含一个方法来处理请求以及一个指向下一个处理者的引用。提供设置和获取下一个处理者的方法。 具体处理者ConcreteHandler 继承或实现抽象处理者接口。具体处理请求的实现如果当前处理者不能处理该请求则将其传递给下一个处理者。 客户端Client 创建处理链的实例并将请求传递给链中的第一个处理者。
三、工作原理
当一个请求发送到责任链中的第一个处理者时它会检查是否能够处理该请求。如果能够处理处理者就会处理请求如果不能处理它就会将请求传递给下一个处理者直到找到能够处理请求的处理者或者链的末端。
四、优缺点
优点
解耦请求的发送者和接收者之间没有直接关系发送者无需知道具体哪个处理者处理了请求。灵活性可以通过动态地添加或删除责任链中的处理者来改变处理请求的逻辑。增强代码的可扩展性可以在不修改现有代码的情况下增加新的处理者。
缺点
性能问题如果链条太长可能会导致性能问题尤其是在每个处理者只做很少的处理时。调试复杂性由于请求在多个处理者之间传递调试起来可能会比较困难。
五、Spring MVC框架的责任链模式应用
springmvc流程 用户发起请求请求先被 Servlet 拦截转发给 Spring MVC 框架Spring MVC 里面的 DispatcherSerlvet 核心控制器会接收到请求并转发给HandlerMappingHandlerMapping 负责解析请求根据请求信息和配置信息找到匹配的 Controller类不过这里如果有配置拦截器就会按照顺序执行拦截器里面的 preHandle方法找到匹配的 Controller 以后把请求参数传递给 Controller 里面的方法Controller 中的方法执行完以后会返回一个 ModeAndView这里面会包括视图名称和需要传递给视图的模型数据视图解析器根据名称找到视图然后把数据模型填充到视图里面再渲染成 Html 内容返回给客户端
过滤器链Filter Chain
过滤器是基于 Servlet 规范的它们用于在请求到达目标 Servlet 之前以及响应返回客户端之前执行一些通用的任务。过滤器链是基于 Servlet 容器的通常用于处理跨请求的通用任务比如日志记录、安全检查、压缩等。责任链模式体现在多个过滤器按配置的顺序依次执行如果某个过滤器决定拦截请求则可以中止链条的继续传递。过滤器链的执行流程 客户端发出请求。请求首先到达过滤器链按照配置顺序依次执行。如果某个过滤器决定不放行请求可以直接返回响应从而中止后续的处理流程。如果所有过滤器都放行则请求继续到达 Spring MVC 的 DispatcherServlet。
拦截器链Handler Interceptor
拦截器是 Spring MVC 提供的更加精细的请求处理机制允许在控制器方法之前和之后进行拦截处理。HandlerInterceptor 接口提供了三个主要方法preHandle、postHandle 和 afterCompletion这些方法可以在请求处理的不同阶段被调用。在 Spring MVC 的配置中多个拦截器可以被配置成链式调用它们之间的关系就是一种典型的责任链模式。请求到达 DispatcherServlet 时首先会通过拦截器链的 preHandle 方法如果所有的拦截器都返回 true请求才会继续到达处理器Handler。处理完成后依次调用拦截器的 postHandle 和 afterCompletion 方法。拦截器链的执行流程请求到达 DispatcherServlet 后根据 Handler Mapping 找到对应的 Controller 处理器。在 Controller 方法执行之前拦截器链中的 preHandle 方法依次执行。如果所有 preHandle 方法都返回 true则继续执行 Controller 方法。Controller 方法执行完毕后拦截器链中的 postHandle 方法按照配置顺序依次执行。最后afterCompletion 方法会在请求完成后执行用于进行一些资源清理或日志记录等操作。
处理器映射链Handler Mapping Chain
在 Spring MVC 中处理器映射Handler Mapping用于将请求 URL 映射到相应的处理器Controller。可以配置多个处理器映射通过责任链模式来依次检查每一个映射器直到找到一个合适的处理器。处理器映射链的执行流程DispatcherServlet 根据配置的多个 Handler Mapping 依次查找合适的 Controller。当找到一个匹配的 Controller 时停止继续查找并调用该 Controller 处理请求。
六、责任链示例
abstract class Handler {protected Handler next;public void setNext(Handler next) {this.next next;}public abstract void handleRequest(int request);
}class ConcreteHandler1 extends Handler {Overridepublic void handleRequest(int request) {if (request 10) {System.out.println(Handler1处理请求: request);} else if (next ! null) {next.handleRequest(request);}}
}class ConcreteHandler2 extends Handler {Overridepublic void handleRequest(int request) {if (request 10 request 20) {System.out.println(Handler2处理请求: request);} else if (next ! null) {next.handleRequest(request);}}
}class Client {public static void main(String[] args) {Handler handler1 new ConcreteHandler1();Handler handler2 new ConcreteHandler2();handler1.setNext(handler2);int[] requests {5, 14, 22};for (int request : requests) {handler1.handleRequest(request);}}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89485.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!