设计模式: 行为型之责任链模式(14)

责任链模式详解附有代码案例分析(包含责任链模式与建造者模式的结合代码案例) 责任链模式一、责任链模式的概念与角色(一)、责任链模式的概念(二)、责任链模式的角色二、责任链模式的应用场景三、无使用责任链模式的代码示例四、使用责任链模式的代码示例五、责任链模式与建造者模式的结合六、责任链模式的优缺点(一)、责任链模式的优点(二)、责任链模式的缺点 一、责任链模式的概念与角色 (一)、责任链模式的概念 ​ 责任链模式是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象 阅读详情

责任链模式概述

  • 责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许对象或对象集合以链式的方式组织在一起,以处理请求
  • 在责任链中,每个对象都包含对下一个对象的引用,并且都有机会处理请求
  • 当某个对象无法处理请求时,它会把请求传递给链中的下一个对象
  • 通过这种方式,请求会沿着责任链传递,直到被某个对象处理为止
  • 责任链模式的主要角色包括:
    • 抽象处理者(Handler)角色
      • 定义一个处理请求的接口。它包含一个指向下一个处理者的引用(即下一个处理者对象的链接)
      • 和一个处理请求的抽象方法(即处理请求的业务逻辑)
    • 具体处理者(ConcreteHandler)角色
      • 实现抽象处理者的接口,处理它负责的请求
      • 如果无法处理该请求,则转发给链中的下一个处理者
    • 客户端(Client)角色
      • 创建处理链,并向链的第一个处理者对象提交请求

责任链应用

// 首先定义一个处理请求的接口
interface Handler {
  nextHandler?: Handler; // 指向下一位处理器的引用

  // 处理请求的方法
  handleRequest(request: Request): void;
}

// 定义一个请求类
class Request {
  constructor(public readonly type: string, public readonly data: any) {}
}

// 创建几个处理不同类型请求的处理器类
class ConcreteHandler1 implements Handler {
  nextHandler?: Handler;

  handleRequest(request: Request): void {
    if (request.type === 'Type1') {
      console.log(`ConcreteHandler1 handled request: ${request.type}`);
    } else if (this.nextHandler) {
      this.nextHandler.handleRequest(request);
    } else {
      console.log('No handler found for this request.');
    }
  }
}

class ConcreteHandler2 implements Handler {
  nextHandler?: Handler;

  handleRequest(request: Request): void {
    if (request.type === 'Type2') {
      console.log(`ConcreteHandler2 handled request: ${request.type}`);
    } else if (this.nextHandler) {
      this.nextHandler.handleRequest(request);
    } else {
      console.log('No handler found for this request.');
    }
  }
}

// 使用示例
function setupChain(): Handler {
  const handler1 = new ConcreteHandler1();
  const handler2 = new ConcreteHandler2();

  // 构建责任链
  handler1.nextHandler = handler2;

  // 返回链头
  return handler1;
}

// 创建请求对象
const request1 = new Request('Type1', 'Some Data');
const request2 = new Request('Type2', 'Other Data');
const request3 = new Request('Type3', 'More Data');

// 创建并初始化责任链
const chain = setupChain();

// 发送请求
chain.handleRequest(request1); // ConcreteHandler1 handled request: Type1
chain.handleRequest(request2); // ConcreteHandler2 handled request: Type2
chain.handleRequest(request3); // No handler found for this request.
  • 在这个示例中:Handler 是一个抽象接口,定义了处理请求的方法 handleRequest,以及指向下一位处理器的 nextHandler 属性
  • Request 类封装了请求的类型和数据
  • ConcreteHandler1 和 ConcreteHandler2 是实现了 Handler 接口的具体处理器类,它们可以根据请求的类型来处理请求,或者将请求委托给链中的下一位处理器
  • setupChain 函数用于构建一个责任链,并返回链头(即第一个处理器)
  • 在客户端代码中,只需将请求发送给链头即可,无需关心请求的具体处理过程和由哪一具体处理器完成
  • 请求会沿着责任链自动传递,直到找到能够处理它的处理器

责任链模式优缺点


1 ) 优点

  • 降低了请求发送者和多个请求处理者之间的耦合度
  • 增强了系统的可扩展性,可以根据需要增加新的请求处理类
  • 增强了给对象指派职责的灵活性,当工作流程发生变化时,可以动态地改变处理者的顺序或增加新的处理者

2 )缺点

  • 性能问题
    • 对于比较长的责任链,当请求在链中传递时,会涉及到多个处理对象的依次调用
    • 这可能导致系统性能受到影响,特别是在处理大量请求时,每个请求都需要在链中遍历一遍,这会增加响应时间和资源消耗
  • 调试困难
    • 由于请求在链中传递,如果处理过程中出现问题,可能会难以定位具体是哪个处理者出现了问题
    • 调试时可能需要跟踪整个链的执行流程,增加了调试的复杂性和时间成本
  • 可能无法处理请求
    • 如果链中没有合适的处理者能够处理请求,或者链的配置有误,可能导致请求无法被正确处理
    • 这种情况下,需要确保链的完整性和正确性,以避免出现请求被忽略或处理不当的情况
  • 可能导致循环调用
    • 在某些情况下,如果责任链的配置不当,处理者之间可能存在循环引用,导致请求在链中无限循环传递,无法正常结束
    • 因此,在构建责任链时需要特别注意避免循环引用的发生

3 )总结

  • 尽管责任链模式存在一些缺点,但它仍然是一种非常有用的设计模式,特别是在需要将请求依次传递给多个处理者进行处理的场景中
  • 在使用责任链模式时,需要权衡其优缺点,并根据具体需求进行适当的调整和优化
14、行为型模式:责任链模式与命令模式 本文详细介绍了两种行为型设计模式——责任链模式与命令模式。责任链模式通过将请求沿处理器链传递,实现了请求发送者与接收者的解耦,并适用于审批流程、异常处理等场景;而命令模式则通过将请求封装为对象,支持撤销操作、命令队列等功能,常用于文本编辑器、事务回滚等需求。文章还探讨了这两种模式的结合使用方式及其在实际项目中的优化策略,帮助开发者构建更灵活、可扩展的系统架构。 阅读详情

相关推荐

C++设计模式13:责任链模式

责任链模式(Chain of Responsibility)是一种行为设计模式,它允许你将请求沿着处理者链进行发送,直到其中一个处理者对其进行处理。

琅嬛福地 803

设计模式之责任链模式(Chain Of Responsibility)

4)职责链模式常被用在框架开发中,用来实现框架的过滤器、拦截器功能,让框架的使用者在不修改源码的情况下,添加新的过滤拦截功能。3)客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不。1)抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和。处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。并且每个类只需要处理自己该处理的工作,不能处理的传递给下一个对象。5)责任分担,每个类只需要处理自己该处理的工作,不能处理的传递给下一个对象完成,

liang8999的博客 3644

大麦APP抢票协议分析:从‘掌密网络’代码看移动端API安全防护

本文深度解析了大麦APP抢票协议的安全防护体系,重点分析了'掌密网络'代码中体现的动态签名、设备指纹和人机验证等关键技术。文章详细介绍了大麦APP如何通过多层次API安全防护应对抢票压力,包括参数加密、请求头部设计和异常处理机制,为移动应用开发者提供了安全实践建议。

weixin_28740299的博客 293

java责任链模式审批请假_Java使用责任链模式处理学生请假问题详解

本文实例讲述了Java使用责任链模式处理学生请假问题。分享给大家供大家参考,具体如下:一. 模式定义在责任链模式中,很多对象由每一个对象对其下家的引用而连接起来,形成一条链。客户端应用请求在这个链上进行传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪个对象最终处理这个请求,这使系统可以在不影响客户端的情况下动态地重新组织链和分配责任。(1)抽象处理者角色:定义出一个处...

weixin_34697798的博客 388

【文献阅读:信道估计】Deep Residual Learning Meets OFDM Channel Estimation

基于深度学习的信道估计技术

weixin_43178683的博客 1756

登临科技Goldwasser加速卡Python SDK实战:从环境配置到YOLOv5模型性能压测

本文详细介绍了登临科技Goldwasser加速卡的Python SDK实战指南,从环境配置到YOLOv5模型性能压测的全过程。通过驱动安装、SDK环境搭建、模型转换与推理优化等步骤,帮助开发者高效利用AI加速卡提升深度学习模型性能。重点分享了批量推理压测技巧和常见问题解决方案,助力开发者充分发挥Goldwasser加速卡的算力优势。

weixin_29035147的博客 302

设计模式行为型——责任链模式

责任链模式(Chain of Responsibility Pattern)又叫职责链模式是一种行为型设计模式,它通过建立一个对象链来依次处理请求,将请求的发送者和接收者解耦,并允许多个对象都有机会处理请求。其目的是为了解决请求端与实现端的解耦。其实现过程类似递归调用。责任链模式的核心是定义责任链节点的接口以及节点之间的关系,它允许动态的增加和修改责任链中的节点。

tszc95的博客 1292

基于CANopenNode协议栈在正点原子探索者开发板上进行移植

配置好之后进行采用keil IDE进行代码生成即可,还需要进行CANopenNode的代码集成,并参照demo进行代码移植。发送完成后心跳包以1s的周期重新开始发送。正点原子的开发板引出的是CAN1接口。这里的心跳时间间隔设置为100ms。则将心跳包周期设置为0。

wangfandashe的博客 4702

14. 设计模式之责任链模式

然后我们创建三种类型的记录器,都扩展了 AbstractLogger。行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。责任链模式允许解耦请求发送者和接收者,沿着处理者链传递,知道请求被处理为止,可能有多个接收者,而发送者不需要知道哪个对象会处理它。结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。

qq_879829564的博客 460

微信小程序 - 解决web-view嵌套H5网页白屏问题,将h5网页嵌套在webview页面出现无法加载一片空白,详解微信小程序<web-view>页面跳转出现白屏情况(无论本地还是线上H5都能解决)

微信小程序解决web-view打开网页在手机上出现白屏的问题,小程序web-view嵌套H5项目白屏问题分析及解决,使用web-view组件加载H5网页链接后白屏情况,小程序嵌套的h5网页中跳转页面时也有可能出现白屏问题,嵌套webview页面时,出现白屏,WebView 加载不出网页,微信小程序<web-view>页面跳转出现白屏解决方法,解决WebView白屏空白,H5内嵌第三方小程序打开白屏,微信小程序嵌入h5页面加载空白,微信小程序web-view跳转h5白屏,解决微信小程序web-view打开网页

🏆 前端领域优质创作者 1万+

7、基于机器学习的生产效率估计方法解析

本文探讨了基于机器学习的生产效率估计方法,重点介绍了效率分析树(EAT)和凸效率分析树(CEAT)算法的原理及其与传统自由处置壳(FDH)和数据包络分析(DEA)方法的对比。通过剪枝优化、生产可能性集构建及方向距离函数(DDF)估计,EAT和CEAT在避免过拟合、提升估计稳定性与处理凸性假设方面展现出优势。结合PISA教育数据的实证研究,采用箱线图、核密度图和非参数检验方法验证了不同模型效率得分分布的显著差异。研究表明,EAT与CEAT为生产效率评估提供了更准确、灵活的工具,适用于教育、企业生产和医疗等多个

milk5的博客 94

14.设计模式——责任链模式

责任链模式 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 介绍 意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 主要解决:

蓝色的天空的博客 1124

点云处理实操(四) -PCL中的点云三角化

点云处理实操(四) -PCL中的点云三角化

cangqiongxiaoye的博客 939

行为型模式:责任链模式

责任链模式是一种行为设计模式,用于将请求的发送者和接收者解耦,允许多个对象有机会处理请求。这些对象通过链式连接,请求沿着链传递,直到有对象处理它为止。该模式的核心思想是将能够处理同一类请求的对象连成一条链,避免请求发送者与接收者之间的直接耦合。责任链模式的主要角色包括处理者(Handler)、具体处理者(Concrete Handler)和客户端(Client)。处理者定义了处理请求的接口,具体处理者实现该接口并处理请求,客户端负责创建处理链并发送请求。通过责任链模式,系统可以灵活地处理不同类型的请求,且易

Luck_ff的博客 840

多智能体强化学习MATD3算法完整复现与分析

多智能体强化学习MATD3算法复现与分析摘要 MATD3算法是多智能体深度强化学习领域的重要进展,通过改进MADDPG算法,引入双Q学习、延迟策略更新和目标策略平滑等技术,显著提升了算法稳定性。本文完整复现了MATD3算法,详细解析了其数学原理,包括部分可观测马尔可夫博弈模型和TD3核心思想。在实现层面,设计了集中式Critic和分布式Actor的神经网络架构,采用PyTorch框架构建了Actor-Critic网络模块,包含精心设计的权重初始化和训练流程。该算法有效解决了多智能体环境中的非平稳性、信用分配

max500600的博客 535

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

设计模式:责任链模式

本文以学校请假审批为例,介绍责任链模式的核心思想,把辅导员、系主任、院长串成一条审批链,假条沿着链传递,谁有权限谁签字。通过 Servlet Filter 链场景演示责任链模式的 Java 实现,并对比 if-else方案说明其在扩展性和运行时灵活性上的优势。

weixin_68431870的博客 452

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式(14):责任链模式及其在Java中的典型应用示例

责任链模式及其在Java中的典型应用实例 1、什么是责任链模式 2、责任链模式的特性 3、责任链模式的优缺点及其应用场景 4、责任链模式的应用示例 5、责任链模式在Java中的典型应用示例 1、什么是责任链模式 责任链模式定义:为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理请求,那么它会把相同的请求传给下一个接收者,以此类推。 2、责任链模式

qq_41969790的博客 2454

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

.net设计模式-责任链模式

行为型设计模式:关注对象与行为的分离 责任链模式:解决一个请求需要多个环节处理,环节还可能扩展 、变化、调整顺序等问题 下面是模拟一个审批的流程,context 是记录这一流程的上下文环境,如果按照最基本的写法为 1 //一个请假申请 2 ApplyContext context = new ApplyContext() 3 ...

aifan2109的博客 356

设计模式14-行为型设计模式-责任链设计模式

编程是一门艺术,大批量的改动显然是非常丑陋的做法,用心的琢磨写的代码让它变的更美观。

风的轨迹 193

设计模式——责任链模式

责任链模式是一种行为型设计模式,它将请求沿着处理者链传递,直到找到能处理该请求的对象。它解决了传统if-else代码臃肿、难以扩展的问题,实现发送者与接收者解耦。典型应用场景包括审批流程、异常处理和事件处理等。该模式通过动态组合处理者链,使系统更灵活可扩展。示例展示了请假审批流程中,不同层级的处理者如何按职责范围依次处理请求。

蔡定努 671

设计模式-14责任链模式(责任链设计模式)详解

意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。何时使用:在处理消息的时候以过滤很多道。如何解决:拦截的类都实现统一接口。关键代码。...

数字人生 370

行为型模式-责任链模式

责任链模式(Chain of Responsibility Pattern) 是一种行为型设计模式,它允许多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合。将这些对象连成一条链,并沿着这条链传递请求,直到某个对象处理它为止。

笑一个吧 714

设计模式之责任链模式

责任链模式是一种非常实用且常见的行为型设计模式,简单来说,就是为请求创建一个接收者对象的链,每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推责任链模式的核心思想是:避免请求发送者与接收者耦合在一起,让多个对象都有机会处理请求。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

smilehappiness的博客 969

23种设计模式-行为型模式总结

行为型模式总结 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 一. 模版方法模式 模版方法模式定义一个算法的骨架,将算法的一些步骤延迟到子类中,使得子类在可以不改变算法结构的情况下重新定义该算法的某些特定步骤。 模版方法模式的核心组件: (1) 抽象类(Abstract Class):负责给出一...

weixin_42285505的博客 1363

【Java开发】设计模式 14:责任链模式

在责任链模式中,每个处理者都有机会处理请求并决定是否将请求传递给下一个处理者。这样,请求就可以在处理者之间自由流动,而不需要明确地指定哪个处理者将处理特定请求。这种灵活性使责任链模式特别适用于动态的、重叠的或未知的请求处理流程。

尹煜的博客 534
上一篇: 设计模式: 行为型之备忘录模式(13)
下一篇: 设计模式: 行为型之模板方法模式(15)
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值