python模式设计之责任链模式

devtools/2024/9/25 0:37:27/

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

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

在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/devtools/2569.html

相关文章

元宇宙VR虚拟线上展馆满足企业快速布展的需要

想要拥有一个VR线上虚拟展馆,展现您的城市风采或企业特色吗? 相比实体展馆搭建,VR线上虚拟展馆投入资金少,回报周期短,只需几个月的时间,您就能开始资金回笼。那么一个VR线上虚拟展馆多少钱呢? 深圳VR公司华锐视点基…

Oracle查询字段所属表及其应用场景详解

Oracle查询字段所属表及其应用场景详解 引言应用场景一:在已知模式下的简单查找应用场景二:跨模式搜索应用场景三:根据表注释或字段注释定位应用场景四:关联表查询结论注意事项 引言 在复杂的数据库环境中,尤其是在拥有…

洛谷题单 -- 图论的简单入门

B3643 图的存储 链接 : 图的存储 - 洛谷 思路 : 这一题要考察图的存储方式 , 一般可以使用邻接矩阵 或 邻接表来存储 图的结点 和1 边的信息 &#xff0c;详情请看代码 : 代码 #include<bits/stdc.h> using namespace std;const int N 1010 ; int n , m ; int …

【React Router】初识路由(中)

加载数据 这一节主要强调 URL、布局和数据 的解耦。 在根模块文件中创建并导出一个加载器函数&#xff0c;并配置到路由。 getContacts() 是我们自己封装的数据请求 API&#xff0c;新增的数据暂时存储到 localforage。 export async function loader() {const contacts a…

python中的设计模式:单例模式

设计模式 设计模式的确切数量并没有一个统一的标准&#xff0c;因为不同的资料和文献可能会对设计模式的定义和分类有所不同。然而&#xff0c;最常见的设计模式集合是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides这四位作者在他们的著作《设计模式&#xff1…

ssm420基于JavaEE的企业人事管理信息系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本企业人事管理信息系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

10.list的模拟实现(普通迭代器和const迭代器的类模板)

1. list的介绍及使用 1.1 list的介绍 list的文档介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过…

STM32程序 关于Semhosting(半主机)和Microlib 以及Printf的关系

一&#xff0c;Keil中Printf导致程序无法运行到Main函数 在Keil中调试STM32程序&#xff0c;编译烧录后&#xff0c;发现程序不能运行&#xff0c;Main函数中点亮LED灯的语句没起作用&#xff0c;说明没有进入Main函数。用Keil调试的时候&#xff0c;虽然设置了Run to main()&…