python模式设计之责任链模式

news/2024/9/22 22:09:59/

责任链模式是一种行为设计模式,它允许对象在链中依次处理请求,直到有一个对象能够处理它为止。

在责任链模式中,一系列对象按照其顺序组成一个链。当请求进入该链时,每个对象都会依次尝试处理请求。如果某个对象可以处理请求,则将其处理结果返回给客户端;如果不能处理,则将请求传递给下一个对象。这样,请求就会在链中传递下去,直到有一个对象能够处理它为止。

在Python中,可以使用函数、类或者对象来实现责任链模式。以下是一个使用类实现责任链模式的示例代码:

class Handler:def __init__(self, successor=None):self.successor = successordef handle_request(self, request):if self.successor is not None:return self.successor.handle_request(request)else:print("No handler found")class ConcreteHandler1(Handler):def handle_request(self, request):if request == "request1":print("Handling request1")else:super().handle_request(request)class ConcreteHandler2(Handler):def handle_request(self, request):if request == "request2":print("Handling request2")else:super().handle_request(request)# 创建责任链
handler1 = ConcreteHandler1()
handler2 = ConcreteHandler2()
handler1.successor = handler2# 处理请求
handler1.handle_request("request1")  # 输出:Handling request1
handler1.handle_request("request2")  # 输出:Handling request2
handler1.handle_request("request3")  # 输出:No handler found

在上面的例子中,Handler是一个抽象类,定义了处理请求的接口,并提供了一个successor属性,用于存储下一个处理者的引用。ConcreteHandler1ConcreteHandler2是具体的处理者,分别处理请求request1request2。在创建责任链时,将handler1successor属性设置为handler2,从而构建了一个包含两个处理者的链。当请求调用handler1.handle_request()时,会依次调用handler1handler2handle_request()方法,直到有一个处理者能够处理该请求为止。如果没有处理者能够处理该请求,则输出"No handler found"。

通过使用责任链模式,可以灵活地组织对象,并且可以动态地添加或移除处理者,从而实现更加可扩展和可维护的代码。


http://www.ppmy.cn/news/1433185.html

相关文章

309. 买卖股票的最佳时机含冷冻期

309. 买卖股票的最佳时机含冷冻期 题目链接:309. 买卖股票的最佳时机含冷冻期 代码如下: /* 转移方程:dp[i][0] max(dp[i - 1][0], max(dp[i - 1][3], dp[i - 1][1]) - prices[i]);dp[i][1] max(dp[i - 1][1], dp[i - 1][3]);dp[i][2] d…

【机器学习入门:理解Scikit-learn与Python的关系】

文章目录 前言Python与机器学习Scikit-learn简介Scikit-learn与Python的关系使用Scikit-learn进行机器学习结语 前言 在当今的数据科学和人工智能领域,机器学习已经成为了一个不可或缺的组成部分。而对于那些刚刚踏入这一领域的新手来说,理解机器学习的基…

Git和Github绑定

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

SpringCloud系列(11)--将微服务注册进Eureka集群

前言:在上一章节中我们介绍并成功搭建了Eureka集群,本章节则介绍如何把微服务注册进Eureka集群,使服务达到高可用的目的 Eureka架构原理图 1、分别修改consumer-order80模块和provider-payment8001模块的application.yml文件,使这…

linq select 和selectMany的区别

Select 和 SelectMany 都是 LINQ 查询方法&#xff0c;但它们之间有一些区别。 Select 方法用于从集合中选择特定的属性或对集合中的元素进行转换&#xff0c;并返回一个新的集合。例如&#xff1a; var numbers new List<int> { 1, 2, 3, 4, 5 }; var squaredNumbers…

在 Windows 系统上彻底卸载 TeamViewer 软件

在 Windows 系统上彻底卸载 TeamViewer 软件 References 免费版仅供个人使用 您的会话将在 5 分钟后终止 Close TeamViewer by locating the TeamViewer icon in the system tray, right click and “Exit TeamViewer”. Right click Windows start menu then Control Panel -…

1883. 准时抵达会议现场的最小跳过休息次数

1883. 准时抵达会议现场的最小跳过休息次数 题目链接&#xff1a;1883. 准时抵达会议现场的最小跳过休息次数 代码如下&#xff1a; //参考&#xff1a;https://leetcode.cn/problems/minimum-skips-to-arrive-at-meeting-on-time/solutions/2746611/jiao-ni-yi-bu-bu-si-kao…

H264 编码标准常见术语解释

H264 编码标准 H.264编码标准&#xff0c;也被称作MPEG-4 AVC&#xff08;Advanced Video Coding&#xff09;&#xff0c;是一种被广泛使用的数字视频压缩标准&#xff0c;由国际电信联盟&#xff08;ITU-T&#xff09;和国际标准化组织&#xff08;ISO&#xff09;共同开发。…