Python设计模式行为型责任链模式
作者:范桂飓 发布时间:2021-08-15 05:58:16
标签:Python,设计模式,责任链模式
一、责任链模式
责任链模式,将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求。通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理。
责任链模式有几个要点:
一个对象中含有另一个对象的引用以此类推形成链条。
每个对象中应该有明确的责任划分,即处理请求的条件。
链条的最后一节应该设计成通用请求处理,以免出现漏洞。
请求应该传入链条的头部
二、应用场景
三、代码示例
实体角色:
抽象处理者(Handler)
具体处理者(Concrete Handler)
客户端(Client)
import abc
# 抽象处理者
class Handler(metaclass=abc.ABCMeta):
@abc.abstractmethod
def handle(self, day):
pass
# 具体处理者,作为链条节点之一。
class GeneralManager(Handler):
def handle(self, day):
if day <= 10:
print(f"总经理准假{day}天")
else:
print("休假太长,不予准假!")
# 具体处理者,作为链条节点之一。
class DivisionManager(Handler):
def __init__(self):
self.next = GeneralManager() # 链接到下一级
def handle(self, day):
if day <= 5:
print(f"部门经理准假{day}天")
else:
print("部门经理准假职级不足")
self.next.handle(day)
# 具体处理者,作为链条节点之一。
class ProjectManager(Handler):
def __init__(self):
self.next = DivisionManager() # 链接到下一级
def handle(self, day):
if day <= 3:
print(f"项目经理准假{day}天")
else:
print("项目经理准假职级不足")
self.next.handle(day)
if __name__ == "__main__":
handler = ProjectManager()
handler.handle(4)
来源:https://is-cloud.blog.csdn.net/article/details/122933665


猜你喜欢
- 一、装饰器由于一个函数能实现一种功能,现在想要在不改变其代码的情况下,让这个函数进化一下,即能保持原来的功能,还能有新的"技能&q
- BSQL Hacker10个SQL注入工具BSQL Hacker是由Portcullis实验室开发的,BSQL Hacker 是一个SQL自
- 图像处理工具——灰度直方图灰度直方图时图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。例子:矩阵图片来自网络,侵删!上
- 接口模块需要用 API 来提供对外服务的接口,当然也可以直接连数据库来取,但是这样就需要知道数据库的连接信息,不太安全,而且需要配置连接,所
- vue2.0中使用mapState及mapActions的方式 // 使用mapStatecomputed: { &nb
- Python3 abs() 函数描述abs() 函数返回数字的绝对值。语法以下是 abs() 方法的语法:abs( x )参数x-- 数值表
- 本文实例为大家分享了opencv矿石图片检测矿石数量的具体代码,供大家参考,具体内容如下原始矿石图片此类图片是高躁图,二值化后图像如下采用膨
- 和数据库打交道要频繁地用到 SQL 语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差、效率低、功能
- 目录本文目标如何使用本教程正则表达式到底是什么?入门测试正则表达式元字符字符转义重复字符类反义替换分组后向引用零宽断言负向零宽断言注释贪婪与
- 1. mysql的md5 mysql存在系统函数md5(“xxxxx”);2. mssql的md5&nb
- 在这篇文章里,我们会聊一聊为什么 Python 决定不支持 switch 语句。为什么想要聊这个话题呢?主要是因为 switch 在其它语言
- asp如何获知页面上的图象的实际尺寸大小?见下面的两个asp文件:<!--#include virtual="/i
- 根据不同配置文件调用不同的验证函数检查输入。可以根据需求更改验证函数的逻辑。def VerifyData(func):  
- 无图形界面的代码编写python代码作为脚本语言,其实最好直接使用vim在字符界面里面直接编写,这才是正道,但是作初学者,其实直接在服务器上
- 1.过滤器的使用1.过滤器和测试器在Python中,如果需要对某个变量进行处理,我们可以通过函数来实现。在模板中,我们则是通过过滤器来实现的
- Template无疑是一个好东西,可以将字符串的格式固定下来,重复利用。同时Template也可以让开发人员可以分别考虑字符串的格式和其内容
- 爬虫与反爬虫,这相爱相杀的一对,简直可以写出一部壮观的斗争史。而在大数据时代,数据就是金钱,很多企业都为自己的网站运用了反爬虫机制,防止网页
- 基于 Snapchat 的增强现实胡子挂件融合第一个项目中,我们将在检测到的脸上覆盖了一个小胡子。我们可以使用从摄像头捕获的连续视频帧,也可
- 一. 什么是Selenium?网络爬虫是Python编程中一个非常有用的技巧,它可以让您自动获取网页上的数据。在本文中,我们将介绍如何使用S
- 这篇文章主要介绍了python numpy数组复制使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,