【计划模式】责任链模式(行为型)⭐⭐

tsx81428  金牌会员 | 2024-6-24 05:12:34 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 646|帖子 646|积分 1938

1.概念

1.1 什么是责任链模式

   责任链模式(Chain of Responsibility)是一种行为计划模式,它答应多个对象处理一个请求,大概将这些对象连成一条链。在责任链模式中,请求从链的一端开始,依次经过每个处理者对象,直到有对象处理它为止。每个处理者都有机会处理请求,也有机会将请求传递给链上的下一个处理者。
  1.2 优点与缺点

优点:
1.低落请求的发送者和接收者之间的耦合关系。
2.请求的发送者不必要知道链中的具体布局。
3.可以动态地添加或修改处理者。
缺点:
1.请求可能在链中得不到处理,必要有机制保证请求被精确处理。
2.系统性能问题,由于请求可能必要在链中传递多次。
2.实现方式

  1. // 抽象处理者接口
  2. public interface Handler {
  3.     void setNext(Handler handler);
  4.     void handleRequest(int request);
  5. }
  6. // 具体处理者实现
  7. public class ConcreteHandler1 implements Handler {
  8.     private Handler nextHandler;
  9.     public void setNext(Handler handler) {
  10.         this.nextHandler = handler;
  11.     }
  12.     public void handleRequest(int request) {
  13.         if (request >= 0 && request < 10) {
  14.             System.out.println("ConcreteHandler1 handled the request " + request);
  15.         } else if (nextHandler != null) {
  16.             nextHandler.handleRequest(request);
  17.         }
  18.     }
  19. }
  20. public class ConcreteHandler2 implements Handler {
  21.     private Handler nextHandler;
  22.     public void setNext(Handler handler) {
  23.         this.nextHandler = handler;
  24.     }
  25.     public void handleRequest(int request) {
  26.         if (request >= 10 && request < 20) {
  27.             System.out.println("ConcreteHandler2 handled the request " + request);
  28.         } else if (nextHandler != null) {
  29.             nextHandler.handleRequest(request);
  30.         }
  31.     }
  32. }
  33. public class ConcreteHandler3 implements Handler {
  34.     private Handler nextHandler;
  35.     public void setNext(Handler handler) {
  36.         this.nextHandler = handler;
  37.     }
  38.     public void handleRequest(int request) {
  39.         if (request >= 20 && request < 30) {
  40.             System.out.println("ConcreteHandler3 handled the request " + request);
  41.         } else if (nextHandler != null) {
  42.             nextHandler.handleRequest(request);
  43.         }
  44.     }
  45. }
  46. // 客户端代码
  47. public class Client {
  48.     public static void main(String[] args) {
  49.         Handler handler1 = new ConcreteHandler1();
  50.         Handler handler2 = new ConcreteHandler2();
  51.         Handler handler3 = new ConcreteHandler3();
  52.         handler1.setNext(handler2);
  53.         handler2.setNext(handler3);
  54.         // 发送请求
  55.         handler1.handleRequest(5);  // 应该由 ConcreteHandler1 处理
  56.         handler1.handleRequest(15); // 应该由 ConcreteHandler2 处理
  57.         handler1.handleRequest(25); // 应该由 ConcreteHandler3 处理
  58.     }
  59. }
复制代码
3. Java 哪些地方用到了责任链模式

   事件处理
Java的AWT(Abstract Window Toolkit)和Swing事件模子利用了责任链模式。当一个事件发生时,它会沿着组件的层级布局传递,直到被某个事件监听器处理。
动态署理
在动态署理中,调用处理器(InvocationHandler)可以形成一个责任链,用于拦截和处理对署理实例的调用。
Servlet 过滤器(Filter)
Java Servlet API答应你界说过滤器,这些过滤器可以形成一个链,用于处理HTTP请求和响应。每个过滤器都有机会修改请求或响应,大概将处理传递给链中的下一个过滤器。
JAX-RS 资源方法处理
在JAX-RS(Java API for RESTful Web Services)中,可以界说多个拦截器和非常映射器,它们可以形成一个责任链,用于处理RESTful请求。
Java EE 拦截器
在Java EE中,拦截器可以界说为一个责任链,用于在调用企业Bean的方法之前或之后实行某些操纵。
Java 安全管理器
在Java的安全管理器中,可以利用责任链模式来处理安全检查。每个安全检查请求可以沿着安全管理器链传递,直到找到能够处理该请求的管理器。
日志记录
一些日志框架(如Log4j或SLF4J)答应你界说多个日志处理器,这些处理器可以形成一个责任链,用于决定怎样记录差别级别的日志信息。
JDBC 驱动管理
Java的JDBC(Java Database Connectivity)驱动管理器利用责任链模式来查找和加载符合的JDBC驱动。
命令模式的实现
在命令模式中,可以利用责任链模式来处理撤销和重做操纵,每个命令可以有本身的撤销和重做链。
非常处理
在Java中,非常处理机制也可以看作是一种责任链模式。当非常被抛出时,它会在调用栈中向上传递,直到找到符合的非常处理块。
  4. Spring 哪些地方用到了责任链模式

   Spring Web MVC 拦截器(HandlerInterceptor)
Spring MVC提供了一个拦截器机制,答应你在请求处理之前和之后实行特定的操纵。拦截器可以形成一个链,每个拦截器都有机会在请求到达控制器之前或之后进行处理。
Spring AOP 切面
Spring的AOP(面向切面编程)机制答应你界说切面,这些切面可以拦截对目的对象的方法调用。切面可以形成一个责任链,用于在方法实行前后实行横切关注点(如日志记录、安全检查等)。
Spring Security 过滤器链
Spring Security利用过滤器链来处理安全相干的请求。每个过滤器都有机会处理请求,大概将请求传递给链中的下一个过滤器。
事件多播器(ApplicationEventMulticaster):
Spring的事件发布机制答应你界说多个事件监听器。当事件被发布时,事件多播器会将事件传递给所有的监听器,这可以看作是一种责任链模式。
Spring 事务管理
Spring的事务管理器可以看作是一个责任链,它负责在方法实行前后处理事务的开启、回滚和提交。
Spring 非常处理
Spring提供了非常处理机制,答应你界说多个非常处理器。当非常发生时,非常处理器链会尝试处理非常,直到找到符合的处理器。
Spring Boot 自动设置
Spring Boot的自动设置机制答应你界说多个设置类,这些设置类可以形成一个责任链,用于条件性地应用设置。
Spring Cloud Gateway 过滤器
Spring Cloud Gateway是一个基于Spring Framework 5、Project Reactor和Spring Boot 2的微服务网关,它提供了过滤器机制,这些过滤器可以形成一个责任链,用于处理请求和响应。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表