设计模式之~职责链模式

news2024/11/26 10:45:39

简述:

        职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。这里发出这个请求的客户端并不知道这当中的哪一个对象最终处理这个请求,这样系统的更改可以在不影响客户端的情况下动态地重新组织和分配责任。

结构图:

实例:

责任链模式存在以下两种情况:

  • 纯的职责链模式:

        一个请求必须被某一个处理者对象所接收,且一个具体处理者对某个请求的处理只能采用以下两种行为之一:自己处理(承担责任);把责任推给下家处理。

  • 不纯的职责链模式:

        允许出现某一个具体处理者对象在承担了请求的一部分责任后又将剩余的责任传给下家的情况,且一个请求可以最终不被任何接收端对象所接收。

优点:

  • 当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandler对象负责处理它,这样做的好处是请求者不用管哪个对象来处理,反正该请求会被处理就对了。

  • 接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需保持它所有的候选接受者的引用。这也就大大降低了耦合度了。(简化了对象:使得对象不需要知道链的结构; 降低耦合度:将请求的发送者和接收者解耦)

  • 增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任

缺点:

  • 一个请求极有可能到了链的末端都得不到处理,或者因为没有正确配置而得不到处理,这就很糟糕了

  • 如果责任链的链路太长或者处理时间过程,会影响性能

  • 如果节点对象存在循环引用时,会造成死循环,导致系统崩溃

使用场景:

        责任链模式主要是解耦了请求与处理,用户只需要将请求发送到链上即可,无需关心请求的具体内容和处理细节,请求会自动进行传递直至有节点进行处理。可以适用于如下场景:

  • 多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定

  • 在不明确指定接收者的情况下,向多个对象中的一个提交请求

  • 可以动态指定一组处理对象的处理请求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/595936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【哈希】位图/布隆过滤器

位图 前言 在实现位图结构之前我们先看一个问题: 给出40亿个不重复的无符号整型,并且是无序的。然后给一个无符号整数,怎样快速判断这个数是否在40亿个数之中。 方法一:对40亿个数据进行遍历。我们会发现,时间复杂度…

重启天涯,一场关于 “救命” 的直播

大家好,我是校长。 昨天在知乎热搜榜上看到了关于天涯网站的帖子,感觉值得思考。 前一段时间,我们就看到了关于天涯要关闭的新闻,感觉撑不下去了。 说实话,当时看到这个新闻的时候,挺感慨的,一个…

初识网络之UDP网络套接字

目录 一、UDP中的socket编程常用接口 1. socket的含义 2. sockaddr结构 3. socket编程中UDP协议常用接口介绍 3.1 创建socket文件描述符(TCP/UDP、客户端 服务器) 3.2 绑定端口号(TCP/UDP,服务器) 3.3 接收数据…

2023年上半年数据库系统工程师上午真题及答案解析

1.计算机中, 系统总线用于( )连接。 A.接口和外设 B.运算器、控制器和寄存器 C.主存及外设部件 D.DMA控制器和中断控制器 2.在由高速缓存、主存和硬盘构成的三级存储体系中,CPU执行指令时需要读取数据,那么DMA控制器和中断CPU发出的数据地…

聊聊我在淘宝做性能分析的经历

我们新推出大淘宝技术年度特刊《长期主义,往往从一些小事开始——工程师成长总结专题》,专题收录多位工程师真诚的心路历程与经验思考,覆盖终端、服务端、数据算法、技术质量等7大技术领域,欢迎一起沟通交流。 本文为此系列第三篇…

RNN基础概念

一、潜变量回归模型 使用潜变量 h t h_{t} ht​总结过去的信息 二、RNN 更新隐藏状态: h t φ ( W h h h t − 1 W h x x t − 1 b h ) h_{t}φ(W_{hh}h_{t-1}W_{hx}x_{t-1}b_{h}) ht​φ(Whh​ht−1​Whx​xt−1​bh​) 更新输出: o t W o h h t b…

第六十天学习记录:C语言进阶:文件操作3文件版通讯录改造

在之前写的静态通讯录和动态通讯录中,都存在一个致命的弊端,那就是当软件运行的过程中添加信息,不关闭软件能够正常显示信息。但一旦关闭软件,内存回收之后当再次打开软件,之前保存的信息全部都得重新添加。 因此需要…

人工智能-推荐

常用的推荐系统算法实现方案有三种: 协同过滤推荐(Collaborative Filtering Recommendation):该算法的核心是分析用户的兴趣和行为,利用共同行为习惯的群体有相似喜好的原则,推荐用户感兴趣的信息。兴趣有高…

老旧Mac不能升级macOS Ventura 13解决方案

老旧Mac不能升级macOS Ventura 13. 我2016年的MacBook Pro,遇到升级xcode失败以及不能更新到最新系统的问题。 ITMS-90725: SDK Version Issue - This app was built with the iOS 15.5 SDK. All iOS apps submitted to the App Store must be built with the iOS 15 SDK or …

chatgpt赋能python:Python信息隐藏:掩耳盗铃的神奇技巧

Python信息隐藏:掩耳盗铃的神奇技巧 在现代社会中,保护信息资产安全已经变得至关重要。信息隐藏(steganography)是一种将秘密信息嵌入到其他无关数据中以便于传输的技术。Python作为一种易学易用,而且功能强大的编程语…

嵌入式驱动入门之LCD-1.基础原理(颜色格式、FB、8080/RGB接口)

主要介绍LCD显示的基本原理,涉及像素、分辨率、颜色模型、RGB888等格式、Framebuffer、8080接口、RGB接口。 参考资料:嵌入式驱动入门之LCD-1.基础原理(颜色格式、FB、8080/RGB接口) 1.LCD显示出图片的基本原理 LCD作为显示器&…

Golang每日一练(leetDay0083) 汇总区间、多数元素II

目录 228. 汇总区间 Summary Ranges 🌟 229. 多数元素 II Majority Element ii 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专…

WPF绘制深圳地铁路线图

经常坐地铁,却不知道地铁多少条线路?哪个站下车?今天就带领大家熟悉并绘制深圳地铁路线图。 WPF在绘制矢量图方面有非常强大的优势,利用WPF可以绘制出各种矢量图形,如线,圆,多边形,…

SQL:批量获取次月留存和滚动留存

一、批量获取每月的次月留存率 问题描述: 现在有一份用户活跃数据,想要取每个月的用户在次月的留存,结果如下表 month活跃用户数次月留存用户数2023-011000050002023-021100060002023-03150007500... 思路: 先生成每个日期对…

Hadoop 原理介绍

1 文件系统和分布式文件系统 1.1 文件系统 文件系统:一种存储和组织数据的方法 实现了数据的存储、分级组织、访问、获取等操作使得用户对文件的访问和查找更容易使用树形目录的抽象概念代替了硬盘等物理设备中数据块的概念 ——>用户不必关系数据底层存在硬盘…

Java与分布式架构:微服务和RPC框架的应用和设计思路

章节一:引言 在当今互联网时代,大规模、高并发的应用成为了主流。为了应对这些挑战,软件架构趋向于分布式架构的设计。本文将重点讨论Java语言在分布式架构中的应用,以及微服务和RPC框架在设计中的关键思路和技术案例。 章节二&…

chatgpt赋能python:Python倒序排列的全面指南

Python倒序排列的全面指南 在Python中,几乎所有的数据结构都支持倒序排列。倒序排列是许多编程问题的解决方案,如查找最后一个元素,寻找最大值或最小值等等。在这篇文章中,我们将深入探讨Python中倒序排列的使用方法和技巧&#…

Flutter 笔记 | Flutter 核心原理(五)Box 布局模型和 Sliver 布局模型

根据前文我们已经从宏观上得知:Layout流程的本质是父节点向子节点传递自己的布局约束Constraints,子节点计算自身的大小(Size),父节点再根据大小信息计算偏移(Offset)。在二维空间中&#xff0c…

Android逆向猿人学2022年app比赛第五题双向验证SSLpinning(步步验证)

SSLpinnig 前言一、起步二、抓包三、分析四、验证第一种方法:第二种方法: 借鉴 前言 这题在抓包方面会有点小问题,但是最后结果是正确出来了,如果有了解后面这个问题的读者,请多指教,十分感谢。 一、起步…

C Primer Plus第十五章编程练习答案

学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出! 由于使用的是命令行参数常用于linux系…