责任链模式详解

责任链模式

场景

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。

在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

一个职责节点的处理,依赖另一个职责节点的处理,形成一条依赖链条。这样可以保证,所有职责节点都可以处理到 Request 请求和 Response 响应。常见的如过滤器的实现方式。

职责节点的存储方式:

  • 以数组方式存储,通过接口传递依赖。

    在单个节点处理过程中,同时将代表职责链的数组传递进去,当前节点的处理依赖职责链中下一个节点的处理,以此形成递归效果。

  • 以对象包裹(依赖)的形式存储,通过内部属性传递依赖。

    最外层的职责链处理,一来内部包含的 next 节点的处理,以此形成依赖效果。

类图

针对请求做相应处理

Request <<interface>> RequestHandlerInterface +void handle(Request) <<abstract>> Chain - RequestHandlerInterface nextHandler; +void addHandler(RequestHandlerInterface) +handle(Request) ValidateHandler +void addHandler(RequestHandlerInterface) +handle(Request) SignatureHandler +void addHandler(RequestHandlerInterface) +handle(Request)

针对请求/响应(request/response)

Request Response <<interface>> FilterInterface +process(Request, RequestHandler) RequestHandler - FilterInterface filters; - int position; +Response handle(Request) UserFilter +process(Request, RequestHandler) ValidateFilter +process(Request, RequestHandler) RouteFilter +process(Request, RequestHandler)

优点

  • 控制请求处理的顺序
  • 符合单一职责。客户端代码和处理操作进行解耦。
  • 符合开闭原则。可以在不改变现有代码情况下对处理操作进行扩展。
  • 部分请求可以不处理
相关推荐
刀法如飞3 小时前
开箱即用的 DDD(领域驱动设计)工程脚手架,基于 Spring Boot 4.0.1 和 Java 21
java·spring boot·mysql·spring·设计模式·intellij-idea
GISer_Jing6 小时前
AI Agent 人类参与HITL与知识检索RAG
人工智能·设计模式·aigc
我是小疯子667 小时前
深入解析Rocket框架的FromRequest与责任链模式
责任链模式
Tiny_React11 小时前
Claude Code Skills 自优化架构设计
人工智能·设计模式
胖虎115 小时前
iOS中的设计模式(十)- 中介者模式(从播放器场景理解中介者模式)
设计模式·中介者模式·解耦·ios中的设计模式
Geoking.15 小时前
【设计模式】组合模式(Composite)详解
java·设计模式·组合模式
刀法孜然15 小时前
23种设计模式 3 行为型模式 之3.6 mediator 中介者模式
设计模式·中介者模式
Yu_Lijing16 小时前
基于C++的《Head First设计模式》笔记——单件模式
c++·笔记·设计模式
Geoking.16 小时前
【设计模式】外观模式(Facade)详解
java·设计模式·外观模式
点云SLAM16 小时前
C++设计模式之单例模式(Singleton)以及相关面试问题
c++·设计模式·面试·c++11·单例模式(singleton)