首页 > 其他分享 >设计模式-职责链模式(Chain of Responsibility)

设计模式-职责链模式(Chain of Responsibility)

时间:2024-07-23 21:18:52浏览次数:14  
标签:职责 请求 Chain String Handler Responsibility msg 设计模式 successor

设计模式-策略模式(Chain of Responsibility)

   概要

   记忆关键词:传递请求,职责链接

   定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链发送请求,直到有一个对象处理它为止。

   分析:当客户提交一个请求,请求是沿链传递直至有一个ConcreteHandler对象负责处理它。

   职责链模式结构图如下:

     

   一、能解决什么问题?

   二、涉及的角色

   1. 抽象类Handler

   统一的抽象类

 1 abstract public class Handler {
 2     protected Handler successor;
 3 
 4     public void setSuccessor(Handler successor) {
 5         this.successor = successor;
 6     }
 7 
 8     abstract String handleRequest(String msg);
 9 
10 }

   2. ConcreteHandler

   职责链模式的每一个具体 Handler类都继承自统一的抽象类

   

 1 public class HandlerA extends Handler{
 2     @Override
 3     String handleRequest(String msg) {
 4         if(msg.contains("a")){
 5             msg = msg.replace('a', '*');
 6         } else if(this.successor != null){
 7             msg = this.successor.handleRequest(msg);
 8         }
 9         return msg;
10     }
11 }

 

   3. Client
定义链的结构

## 2.优缺点分析

### 2.1 优点
- 由于是在客户端定义链的结构,因此可以随时地增加或者修改处理一个请求的结构,增强了给对象指派职责的灵活性

### 2.2 缺点
- debug:对代码Debug不太友好。在代码逻辑比较复杂,链路比较长的情况下,Debug可能要深入很多层。

## 3.注意事项
一个请求极有可能到了链的末端都得不到处理,或者因为没有正确配置而得不到处理,这就很糟糕了,需要事先考虑全面

## 4. 项目中的使用
- 过滤器Filter
当客户端对Web应用发出HTTP请求的时候,会首先经过Tomcat容器的一层层过滤器(Filter),过滤器会针对请求的访问权限、参数合法性等方面进行验证和过滤。

- Springboot中的拦截器:Interceptor
这一系列拦截器的处理流程,也同样是职责链模式的实现

标签:职责,请求,Chain,String,Handler,Responsibility,msg,设计模式,successor
From: https://www.cnblogs.com/hld123/p/18319656

相关文章

  • Java常用设计模式-单例模式
    Java常用设计模式-单例模式JavaDesignPatterns:创建型模式:工厂方法、抽象方法、建造者、原型、单例结构型模式有:适配器、桥接、组合、装饰器、外观、享元、代理行为型模式有:责任链、命令、解释器、迭代器、中介、备忘录、观察者、状态、策略、模板方法、访问者常用设计模式:......
  • 创建型模式-单例设计模式
    一、单例设计模式单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可......
  • 【设计模式】建造者模式
    设计模式的分类:        创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用new运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。        工厂模式、抽象工厂模式、单例模式、建造者模式......
  • 设计模式-状态模式(State pat)
    设计模式-策略模式(StatePattern)  概要   记忆关键词:状态变成类  定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。  状态模式结构图如下:    一、能解决什么问题?  它主要用来解决对象在多种状态转换时,需要对外输出不同......
  • 【Java常用设计模式】通俗易懂的玩转单例、建造者、工厂、策略模式(保姆篇)
    文章目录单例模式建造者模式工厂模式策略模式本篇小结更多相关内容可查看在一个狂风骤雨的下午,有人突然问了我一句,单例模式是什么,我愣了,相信看完这篇就不会愣了,本文以通俗易懂的方式写的,可能有不严谨的地方......
  • C. Divisor Chain
    原题链接题解任何数一定可以被二进制表示下最低位的一及以下的二次方数整除code#include<bits/stdc++.h>#definelllonglong#definelowbit(x)((x)&(-x))usingnamespacestd;voidsolve(){intn;cin>>n;intm=log2(n);intn1=1<<m;vector......
  • langchain:ModuleNotFoundError:没有名为“langchain_community”的模块
    尝试执行此代码:fromlangchain_community.vectorstoresimportFAISS显示错误:ModuleNotFoundError:没有名为“langchain_community”的模块我已经执行了命令:pipinstalllangchain-社区遇到的错误是因为没有名为“langchain-community”......
  • 使用 Langchain 和 OpenAI 将矢量嵌入数据从 PDF 添加到 PineCone
    我不确定PineCone和Langchain的.get()替代方案是什么。我希望运行此代码,但我不断收到错误消息,指出.get不是Pinecone的属性。我不确定有什么替代方案可以替代它。defadd_to_pinecone(chunks:list[Document]):VectorStore=Pinecone(index='portfolio-assistan......
  • 生产者消费者设计模式
    生产者消费者设计模式学习一、什么是生产者消费者设计模式Java中的生产者-消费者设计模式是一种用于多线程编程的经典设计模式,它用于解决多个线程之间共享资源时的同步和通信问题。这个模式主要用在有数据生产者(Producer)和数据消费者(Consumer)的场景中,生产者负责产生数据,而消费者......
  • 职责链、命令和观察者设计模式的区别
    职责链、命令和观察者是三种不同的设计模式,它们各自解决不同类型的问题。下面分别介绍这三种设计模式的特点和区别:1.职责链模式(ChainofResponsibility)定义:职责链模式是一种行为设计模式,它通过将请求的处理者组织成一个链,使得请求可以沿这条链传递,直到有一个处理者处理......