设计模式的艺术-职责链模式

行为型模式的名称、定义、学习难度和使用频率如下表所示:

1.如何理解职责链模式

  1. 最常见的职责链是直线型,即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并让请求沿着链传递,由链上的处理者对请求进行相应的处理,客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,实现请求发送者和请求处理者解耦。

  2. 职责链模式(Chain of Responsibility Pattern):避免将请求发送者与接收者耦合在一起,让多个对象都有机会接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。

  3. 职责链模式通过建立一条链来组织请求的处理者。请求将沿着链进行传递,请求发送者无须知道请求在何时、何处以及如何被处理,实现了请求发送者与处理者的解耦。在软件开发中,如果遇到有多个对象可以处理同一请求时可以应用职责链模式。例如,在Web应用开发中创建一个过滤器(Filter)链来对请求数据进行过滤,在工作流系统中实现公文的分级审批等。

  4. 职责链模式的适用场景通常具有以下特点:存在一系列有序的处理步骤或环节,每个环节的处理者具有不同的职责和处理能力,并且处理的顺序和具体的处理者可能会根据情况动态变化。

2.如何理解纯与不纯的职责链模式

  1. 纯的职责链模式

    1. 概念:一个请求必须被链中的某个处理者处理,而且每个处理者要么处理请求,要么将请求传递给下一个处理者,不存在中途终止传递的情况。也就是说,在纯的职责链模式中,请求一定会沿着链传递下去,直到有一个处理者能够处理它为止。

    2. 常见的业务场景:审批流程、消息传递、事件的处理等。

    3. 优点:解耦请求发送者和接收者、增强了系统的灵活性、实现了职责的分离、动态分配职责、提高了代码的可维护性和可扩展性等。

  2. 不纯的职责链模式

    1. 概念:允许某个处理者在处理请求后,停止请求的传递,或者在处理不了请求的情况下也不传递给下一个处理者。这可能导致某些情况下请求得不到处理。

    2. 常见的业务场景:部份可中断的流程、条件性处理、优先级的处理、异步处理的部分场景等。

    3. 优点:提高效率、灵活控制流程、减少不必要的处理

3.职责链模式的优缺点

  1. 优点

    1. 解耦请求者和处理者:使得请求的发送方不需要知道具体由谁来处理请求,降低了它们之间的直接依赖。

    2. 增强了灵活性:可以轻松地添加、删除或重新排列处理者,而无需修改请求发送方的代码。

    3. 提高了系统的可扩展性:新的处理者可以方便地加入到职责链中,以处理新的请求类型或扩展现有功能,符合开闭原则。

    4. 职责分离:每个处理者只关注自己的处理逻辑,职责明确,易于维护和理解。

  2. 缺点

    1. 不能保证请求一定被处理:在纯的职责链模式中,如果所有处理者都无法处理请求,可能会导致请求无人处理;在不纯的模式中,如果控制不当,也可能出现请求被遗漏的情况。

    2. 可能导致性能问题:如果职责链过长,请求的传递和处理可能会带来一定的性能开销。

    3. 如果建链不当,可能会造成循环调用,将导致系统陷入死循环。

4.职责链模式的适用场景

  1. 审批流程:如请假申请、费用报销审批等,不同级别的人员按照一定顺序进行审批。

  2. 工作流处理:在复杂的业务流程中,如订单处理流程,包括下单、库存检查、支付、发货等环节,每个环节由不同的处理者负责。

  3. 消息过滤和处理:在消息中间件中,对不同类型、优先级或来源的消息进行过滤和处理。

  4. 任务分配:将任务按照一定规则分配给不同的处理者,每个处理者根据自身条件决定是否接受并处理任务。

以上内容为根据书本内容配合搜索引擎整理得来,目的是为了学习,要是有侵权的情况发生,请联系我,我会立即予以删除,谢谢!

一起成长,人生是马拉松,可以跑得慢,但一定要在路上。

相关推荐
飞飞传输2 小时前
飞驰云联文件交换建设方法论:从单点传输到持续治理
大数据·运维·安全
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(十五):CMA 连续内存分配器
linux·运维·服务器
测试界的小码农3 小时前
【Linux 命令实战(01):认识 Linux 终端,从零掌握第一个命令】
linux·运维·服务器
布裘4 小时前
【银河麒麟】重启后时区丢失?排查发现 localtime 被业务程序替换成硬链接
linux·运维·网络
huainingning4 小时前
锐捷10.X路由器版本升级不生效问题排查
运维·网络·智能路由器
荣合技术服务5 小时前
HPC 超算集群故障维修实录:找荣合科算维护后,模拟仿真计算又能跑了
运维·服务器·超算服务器·荣合科算
AR-26710-8 小时前
Linux Day31——实操启停服务改端口重启
linux·运维
百度Geek说8 小时前
QCon上海2026:百度 SRE Agent 规模化落地实践解读
运维·自动化运维
叼烟扛炮8 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php