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

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

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

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

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

相关推荐
等一场春雨1 小时前
Java设计模式 九 桥接模式 (Bridge Pattern)
java·设计模式·桥接模式
我的运维人生1 小时前
MongoDB深度解析与实践案例
数据库·mongodb·运维开发·技术共享
不会飞的小龙人2 小时前
Docker Compose创建镜像服务
linux·运维·docker·容器·镜像
不会飞的小龙人2 小时前
Docker基础安装与使用
linux·运维·docker·容器
小歆8844 小时前
100%全国产化时钟服务器、全国产化校时服务器、全国产化授时服务器
运维·服务器
翻滚吧键盘4 小时前
debian中apt的配置与解析
运维·debian
等一场春雨5 小时前
Java设计模式 十四 行为型模式 (Behavioral Patterns)
java·开发语言·设计模式
workingman_li5 小时前
centos虚拟机异常关闭,导致数据出现问题
linux·运维·centos
Jackson~Y5 小时前
Linux(LAMP)
linux·运维·服务器
不知 不知6 小时前
最新-CentOS 7安装1 Panel Linux 服务器运维管理面板
linux·运维·服务器·centos