python 职责链模式
模式定义
责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。 这种模式给予请求的类型,对请求的发送者和接收者进行解耦。
这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
UML类图
职责链模式
示例代码
天气冷了,小明今天起来的比较晚不想去上班了。准备给公司请个假,公司的请假流程是这样的:
0 < x < 3h 组长可以直接审批
3h < x < 48h 部门领导审批
48 < x 部门领导需要向boss汇报,让他审批
'''
代码示例 天气冷了,小明今天起来的比较晚不想去上班了。准备给公司请个假,公司的请假流程是这样的:
1:0 < x < 3h 组长可以直接审批
2:3h < x < 48h 部门领导审批
3:48 < x 部门领导需要向boss汇报,让他审批
''' import abc class AbsLeader(abc.ABC): def __init__(self):
self._next = None # 请假
@abc.abstractmethod
def leave(self): ... # 下一位处理者
@property
def next(self):
if (not self._next):
raise Exception("无处理对象")
return self._next @next.setter
def next(self, process):
self._next = process class GroupLeader(AbsLeader):
def leave(self, hour: float):
if hour < 3:
print("ok,请假组长批了")
else:
self.next.leave(hour) class DepartmentLeader(AbsLeader):
def leave(self, hour):
if hour < 48:
print("ok,请假部门主管批了")
else:
self.next.leave(hour) class BossLeader(AbsLeader):
def leave(self, hour):
if hour >= 48:
print("ok,请假boss批了") if __name__ == "__main__": # 组建责任链
groupleader = GroupLeader()
department = DepartmentLeader()
boos = BossLeader() groupleader.next = department
department.next = boos # 请假1小时,组长处理
groupleader.leave(1) # 请假45小时,部门处理
groupleader.leave(45) # 请假66小时,boss处理
groupleader.leave(66)
python 职责链模式的更多相关文章
- 大话设计模式Python实现-职责链模式
职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系.将对象连成链并沿着这条链传递请求直到被处理 下面是一个设计模式的demo: ...
- [Python设计模式] 第24章 加薪审批——职责链模式
github地址:https://github.com/cheesezh/python_design_patterns 题目 用程序模拟以下情景 员工向经理发起加薪申请,经理无权决定,需要向总监汇报, ...
- 设计模式---数据结构模式之职责链模式(Chain of Responsibility)
一:概念 职责链模式(CoR,Chain of Responsibility)是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被 ...
- JavaScript之职责链模式
一.概述 职责链模式(Chain of responsibility),就是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有 ...
- C#设计模式系列:职责链模式(Chain of Responsibility)
1.职责链模式简介 1.1>.定义 职责链模式是一种行为模式,为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求.将这些对象连接成一条链,并沿着这条链传递该请求,直到有一个对 ...
- php实现设计模式之 职责链模式
<?php /** * 职责链模式 * * 为解除请求的发送者和接收者之间的耦合,而使用多个对象都用机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 * 抽象 ...
- Filter体现职责链模式
1. 前言 Filter—Filter 技术是servlet2.3 新增加的功能.完成的流程:对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后 ...
- Js 职责链模式 简单理解
js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...
- JAVA 设计模式 职责链模式
用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...
随机推荐
- luogu_2831: 愤怒的小鸟
洛谷2831:愤怒的小鸟(状压\(dp\)) 题意: 在二维平面上给定\(n\)个点\((1\leq n\leq18)\). 其中每个点用\((x_i,y_i)\)表示\((0<x_i,y_i& ...
- vue-element-admin
https://github.com/deadzq/vue-element-admin-1.git vue-element-admin使用. cnpm install npm run dev
- 洛谷/Codeforces CF865D 题解
若想要深入学习反悔贪心,传送门. Description: 已知接下来 \(n\) 天的股票价格,每天可以买入当天的股票,卖出已有的股票,或者什么都不做,求 \(n\) 天之后最大的利润. Metho ...
- pfx格式和cer格式的区别
来一篇大神的帖子就都懂了. 版权声明:本文为CSDN博主「天府云创」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn. ...
- GoCN每日新闻(2019-11-02)
GoCN每日新闻(2019-11-02) GoCN每日新闻(2019-11-02) 1. Go 1.13.4 and Go 1.12.13 are released https://groups.go ...
- spring以及json,fastjson和jackson
(一) @RestController 以及 @RequestBody spring的这两个注解都需要使用对应的 message-converters 实现 pojo到字符串的转换, 需要配置实现了 ...
- Parallel.For循环与普通的for循环
前两天看书发现了一个新的循环Parallel.For,这个循环在循环期间可以创建多个线程并行循环,就是说循环的内容是无序的.这让我想到了我前面的牛牛模拟计算是可以用到这个循环的,我前面的牛牛模拟计算是 ...
- 直接从ADB接出串口调试
1,从硬件接出串口线 2,用串口工具连接上串口工具,串口工具地址:https://files.cnblogs.com/files/senior-engineer/%E4%B8%B2%E5%8F%A3% ...
- zookeeper生产最广泛使用java客户端curator介绍及其它客户端比较
关于zookeeper的原理解析,可以参见zookeeper核心原理详解,本文所述大多数实践基于对zookeeper原理的首先理解. Curator是Netflix公司开源的一个Zookeeper客户 ...
- zookeeper从3.4.8升级到3.4.14
升级背景说明: 最近在做系统安全扫描时,扫出来zookeeper存在安全漏洞 Apache Zookeeper 缓冲区溢出漏洞(CVE--) 官方给出的升级建议: 地址:https://zookeep ...