0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

设计模式之责任链模式概述

jf_xutpKvFS 来源:老汉聊技术 2023-09-27 09:54 次阅读

概述

设计模式是一些被反复使用的、具有普遍性的设计解决方案,它们是在特定情境下对软件设计问题的成功解决方式的总结和归纳。常见的设计模式可以分为以下三类:

创建型模式:这些模式用于处理对象的创建过程,包括工厂模式、抽象工厂模式、单例模式、建造者模式和原型模式。

结构型模式:这些模式用于处理对象之间的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。

行为型模式:这些模式用于处理对象之间的交互,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。

这些设计模式提供了在软件设计中常用的一些解决方案,帮助开发人员更加高效地进行设计和开发。同时,这些模式还提高了代码的可维护性和可扩展性。

责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它可以将请求的发送者和接收者解耦,并且使得多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。责任链模式通常被用来处理复杂的请求处理流程,例如在一个大型系统中,一个请求可能需要经过多个处理器才能最终被处理。

一、应用场景

责任链模式通常适用于以下情况:

当有多个对象可以处理一个请求,并且它们需要按照一定的顺序处理请求时,可以使用责任链模式。

当需要动态地添加或删除请求处理对象时,可以使用责任链模式。

当需要将请求处理对象从主体中分离出来时,可以使用责任链模式。

典型应用场景如下:

Web 应用程序中的过滤器:Web 应用程序中经常使用过滤器,来对请求进行预处理或后处理。使用责任链模式可以动态地将过滤器添加到链中,从而实现对请求的预处理或后处理。

日志记录:日志记录是一种典型的责任链模式。在日志记录中,日志记录器通常会根据日志级别将日志分成不同的等级,并将日志发送到相应的处理器进行处理。

异常处理:在程序中,可能会发生各种异常情况,如空指针异常、数组越界异常等。使用责任链模式可以将不同类型的异常处理器组成一个链,从而依次处理异常,并在链的末尾将异常记录到日志中。

消息处理:在消息队列中,可能会有多个消息处理器,用于处理不同类型的消息。使用责任链模式可以将这些消息处理器组成一个链,从而依次处理消息,并将消息传递给下一个处理器。

二、实现方式

责任链模式通常由以下角色组成:

抽象处理器(Handler):定义了一个处理请求的接口,并且保持了一个对下一个处理器的引用。

具体处理器(ConcreteHandler):实现了抽象处理器的接口,处理请求的同时,也能够决定是否将请求转发给下一个处理器。

客户端(Client):创建责任链,并将请求发送给第一个处理器。

三、代码示例

下面是一个使用责任链模式的示例,假设有一个业务流程,需要依次经过三个处理器才能完成。如果某个处理器无法处理请求,它将请求转发给下一个处理器,直到请求被处理完成。

wKgZomUTi82ACqPNAAEZAomBLos665.jpg
wKgaomUTi9uAT6L-AADxaw1qOYI296.jpg

上述示例中,Handler 是抽象处理器,定义了处理请求的接口,并保持了一个对下一个处理器的引用。ConcreteHandler1、ConcreteHandler2 和 ConcreteHandler3 是具体处理器,实现了抽象处理器的接口,并能够处理请求,并决定是否将请求转发给下一个处理器。Client是客户端,创建了责任链,并将请求发送给第一个处理器。

运行该示例,将会输出如下内容:

ConcreteHandler1 is handling the request.ConcreteHandler2 is handling the request.ConcreteHandler3 is handling the request.No handler is available.

四、优缺点

优点:

可以将请求的发送者和接收者解耦,并且使得多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。

可以动态地添加或删除请求处理对象,从而增加或减少请求处理的灵活性。

可以将请求处理对象从主体中分离出来,从而简化了主体的代码。

缺点:

如果责任链太长,可能会导致请求的处理时间过长,从而影响系统性能。

如果责任链的配置不当,可能会导致请求不能被正确处理。

五、总结

责任链模式是一种行为型设计模式,它可以将请求的发送者和接收者解耦,并且使得多个对象都有机会处理请求。责任链模式适用于多个对象可以处理一个请求,并且需要按照一定的顺序处理请求的情况。使用责任链模式可以动态地添加或删除请求处理对象,从而增加或减少请求处理的灵活性,但如果责任链太长,可能会导致请求的处理时间过长,从而影响系统性能。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18299

    浏览量

    222316
  • 接收机
    +关注

    关注

    8

    文章

    1122

    浏览量

    52654
  • 过滤器
    +关注

    关注

    1

    文章

    407

    浏览量

    19004
  • 迭代器
    +关注

    关注

    0

    文章

    43

    浏览量

    4274

原文标题:设计模式之责任链模式

文章出处:【微信号:LabVIEW QT 修炼之路,微信公众号:LabVIEW QT 修炼之路】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    多内核设计的三种设计模式概述

    下面是对采用当前开发工具和硬件直接实现多内核系统的三个简单模型的概述。这些多内核设计模式不是一个为了严格定义一个系统的刚性模型,而是针对思考和探讨关于系统实现宏伟
    发表于 02-21 10:54 1361次阅读
    多内核设计的三种设计<b class='flag-5'>模式</b><b class='flag-5'>概述</b>

    开篇词 设计模式:程序员的基本功,你离及格还差多少?

    程序员设计模式
    LV36
    发布于 :2023年03月16日 20:51:26

    电机控制常用算法概述(3)

    和驱动顺序是不变的。未完待续!!本文相关文章1、 电机控制常用算法概述(1)2、电机控制常用算法概述(2)
    发表于 10-29 16:45

    为什么使用菊花配置模式对FPGA编程会失败?

    亲爱的先生,我们使用了2个Vertex 5&amp; spartan 6 FPGA,用于使用菊花配置模式对这些FPGA进行编程。1.我们正在使用xilinx Blaster“平台电缆USB
    发表于 11-07 08:25

    STM32CubeMX串口中断模式收发数据

    概述上一篇 说了 STM32CubeMX串口的使用 (阻塞模式) ,这一章来说说串口中断模式收发数据。文章目录概述一. 在STM32Cub
    发表于 08-13 08:34

    Flash地址管理问题控制模式中的定点模式

    文章目录通信路程序框架源码解析功能任务作用Bootloader+Firmware程序烧录与Flash地址管理问题控制模式中的定点模式(需配合光流模块),此模式下,通过光电定点,激光(
    发表于 08-23 09:06

    USCI的同步模式SPI概述

    目录硬知识USCI的同步模式SPI概述SPI特性及结构框图同步操作原理与操作USCI寄存器——SPI模式USCI_x_SPI API (机翻)处理状态和初始化的函数参数处理数据的函数参数管理中断
    发表于 11-29 07:54

    什么是设计模式?为什么要学习设计模式

    物是人非事事休,当周围的一切都发生着改变,包括我们的需求、程序等,我们又该如何去应对和解决呢?欢迎进入编程人员必经之路------设计模式1 本篇概述什么是设计模式为什么要学习设计模式
    发表于 01-19 06:41

    三种多内核设计模式概述

    使用多处理器内核要求软、硬件团队之间进行更多的系统级设计合作。基于这种理念,下面是对采用当前开发工具和硬件直接实现多内核系统的三个简单模型的概述。这些多内核设计模式不是一个为了严格定义一个系统的刚性
    的头像 发表于 07-15 11:21 3113次阅读
    三种多内核设计<b class='flag-5'>模式</b><b class='flag-5'>概述</b>

    电压模式降压稳压器的TI的中文资料概述

    本文档的主要内容介绍的是TI给的电压模式降压稳压器的中文资料概述
    发表于 05-10 11:40 18次下载
    电压<b class='flag-5'>模式</b>降压稳压器的TI的中文资料<b class='flag-5'>概述</b>

    概述STM32中GPIO的8种工作模式

    概述STM32中GPIO的8种工作模式
    发表于 07-06 17:35 26次下载
    <b class='flag-5'>概述</b>STM32中GPIO的8种工作<b class='flag-5'>模式</b>

    C语言设计模式的程序资料合集

    之模板模式,C语言设计模式之工厂模式,C语言设计模式责任模式,C语言设计
    发表于 11-16 08:00 4次下载

    MCU学习笔记_STM32低功耗模式概述

    MCU学习笔记电源管理系统1. STM32低功耗模式概述2. 寄存器和库函数配置3. HAL库配置PVD实例1. STM32低功耗模式概述系统或电源复位后,微控制器处于运行状态,HCL
    发表于 10-28 17:36 9次下载
    MCU学习笔记_STM32低功耗<b class='flag-5'>模式</b><b class='flag-5'>概述</b>

    什么是责任链?

    责任模式是行为模式的一种,它将需要触发的Handler组成一条链,发送者将请求发给链的第一个接收者,并且沿着这条链传递,直到有一个Handler来处理它或者直到最后也没有对象处理而留在链末尾端;
    的头像 发表于 02-16 14:41 646次阅读

    责任链设计模式详解

    责任模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。
    的头像 发表于 05-22 15:12 252次阅读
    <b class='flag-5'>责任</b>链设计<b class='flag-5'>模式</b>详解