行为型设计模式-责任链(chain of responsibility)模式-python实现

本文主要是介绍行为型设计模式-责任链(chain of responsibility)模式-python实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

设计模式汇总:查看

通俗示例

想象一下你在一个客服中心工作,当一个客户的问题提交给客服中心时,这个问题可能会被第一个可用的客服人员处理。如果这位客服人员无法解决问题,那么问题会被转发给更高级别的客服。这个过程可能会一直持续到问题被解决或者达到最高级别的支持。这种处理问题的方式就是一个责任链的例子。

通俗解释

责任链模式是一种行为型设计模式,它允许将请求沿着处理者链进行传递,直到有一个处理者能够处理它为止。在责任链模式中,多个对象都有机会处理请求,将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它或者请求到达链的末端。

责任链模式的组成包括:

  • 处理者(Handler):定义处理请求的接口,通常还包含一个指向下一个处理者的引用。
  • 具体处理者(Concrete Handler):处理它所负责的请求,如果无法处理,则将请求传递给链中的下一个处理者。

责任链模式的优点

  • 降低耦合度:请求的发送者和接收者之间无需知道对方的详细信息。
  • 增加灵活性:可以动态地添加或者删除处理者,无需修改现有代码。
  • 增强可扩展性:可以很容易地扩展新的处理者类。

Python代码示例

以下是一个责任链模式的简单实现:

class Manager:"""经理类"""successor = Nonename = ''def __init__(self, name):self.name = namedef setSuccessor(self, successor):# 设置上级self.successor = successordef handleRequest(self, request):# 处理请求passclass LineManager(Manager):"""直属经理"""def handleRequest(self, request):if request.requestType == 'DaysOff' and request.number <= 3:return '%s:%s Num:%d Accepted OVER' % (self.name, request.requestContent, request.number)else:print('%s:%s Num:%d Accepted CONTINUE' % (self.name, request.requestContent, request.number))if self.successor is not None:return self.successor.handleRequest(request)class DepartmentManager(Manager):"""部门经理"""def handleRequest(self, request):if request.requestType == 'DaysOff' and request.number <= 7:return '%s:%s Num:%d Accepted OVER' % (self.name, request.requestContent, request.number)else:print('%s:%s Num:%d Accepted CONTINUE' % (self.name, request.requestContent, request.number))if self.successor is not None:return self.successor.handleRequest(request)class GeneralManager(Manager):"""总经理"""def handleRequest(self, request):if request.requestType == 'DaysOff':return '%s:%s Num:%d Accepted OVER' % (self.name, request.requestContent, request.number)class Request:"""请求类,用于封装请求信息和处理请求。Attributes:requestType: 请求的类型。requestContent: 请求的内容。number: 请求的编号,默认为0。"""def __init__(self, requestType, requestContent, number=0):"""初始化请求对象。Args:requestType: 请求的类型。requestContent: 请求的内容。number: 请求的编号,默认为0。"""self.requestType = requestTypeself.requestContent = requestContentself.number = numberdef commit(self, generalManager):"""提交请求,由请求者调用,将请求交给管理者处理。Args:generalManager: 管理者对象,用于处理请求。Returns:处理请求后的返回值。"""ret = generalManager.handleRequest(self)print(ret)return ret# 当模块作为主程序运行时,以下代码块将被执行
if __name__ == '__main__':# 创建一线经理、部门经理和总经理的实例line_manager = LineManager('LINE MANAGER')department_manager = DepartmentManager('DEPARTMENT MANAGER')general_manager = GeneralManager('GENERAL MANAGER')# 设置一线经理的继任者为部门经理,部门经理的继任者为总经理line_manager.setSuccessor(department_manager)department_manager.setSuccessor(general_manager)# 创建请假申请实例并提交给一线经理审批# 申请一天假期request = Request(requestContent="'Ask 1 day off'", requestType='DaysOff', number=1)request.commit(line_manager)# 创建请假申请实例并提交给一线经理审批# 申请五天假期request = Request(requestContent="'Ask 5 day off'", requestType='DaysOff', number=5)request.commit(line_manager)# 创建请假申请实例并提交给一线经理审批# 申请十天假期request = Request(requestContent="'Ask 10 day off'", requestType='DaysOff', number=10)request.commit(line_manager)

总结

责任链模式通过将请求的发送者和接收者解耦,允许动态地构建处理者链,使得请求可以在多个对象之间传递,直到被处理。这种方式特别适用于那些需要多个对象共同处理一个请求的场景,比如异常处理、工作流处理等。

这篇关于行为型设计模式-责任链(chain of responsibility)模式-python实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138106

相关文章

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验