模式定义

责任链模式(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 职责链模式的更多相关文章

  1. 大话设计模式Python实现-职责链模式

    职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系.将对象连成链并沿着这条链传递请求直到被处理 下面是一个设计模式的demo: ...

  2. [Python设计模式] 第24章 加薪审批——职责链模式

    github地址:https://github.com/cheesezh/python_design_patterns 题目 用程序模拟以下情景 员工向经理发起加薪申请,经理无权决定,需要向总监汇报, ...

  3. 设计模式---数据结构模式之职责链模式(Chain of Responsibility)

    一:概念 职责链模式(CoR,Chain of Responsibility)是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被 ...

  4. JavaScript之职责链模式

    一.概述 职责链模式(Chain of responsibility),就是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有 ...

  5. C#设计模式系列:职责链模式(Chain of Responsibility)

    1.职责链模式简介 1.1>.定义 职责链模式是一种行为模式,为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求.将这些对象连接成一条链,并沿着这条链传递该请求,直到有一个对 ...

  6. php实现设计模式之 职责链模式

    <?php /** * 职责链模式 * * 为解除请求的发送者和接收者之间的耦合,而使用多个对象都用机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 * 抽象 ...

  7. Filter体现职责链模式

    1. 前言 Filter—Filter 技术是servlet2.3 新增加的功能.完成的流程:对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后 ...

  8. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

  9. JAVA 设计模式 职责链模式

    用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...

随机推荐

  1. foreach中的collection

    foreach中collection的三种用法 https://www.cnblogs.com/xiemingjun/p/9800999.html foreach的主要用在构建in条件中,它可以在SQ ...

  2. VirtualBox support USB3.0 funciton

    首先确认Oracle VM VirtualBox 的版本 然后通过如下链接下载对应的扩展增强包: http://download.virtualbox.org/virtualbox 再则,通过管理-& ...

  3. 用nginx代理请求,django后台静态文件找不到的问题

    使用谷歌开发者工具,查看静态文件的地址,把相应的地址配置到nginx中 默认的django后台静态文件的路径是 /usr/local/lib/python3.6/site-packages/djang ...

  4. .NET总结--ASP.NET工作原理

    前言 前前后后写了不少关于某些技术啥的博客,一直在追新求深,而真正使用上的时候才发现了解的太少太少了,从事.net开发三年有余了不是它不行了而是我坚持不住了,如今不得不向生活低头,这个系列作为三年技术 ...

  5. JavaScript设计模式经典-面向对象中六大原则

    作者 | Jeskson来源 | 达达前端小酒馆 1 主要学习JavaScript中的六大原则.那么六大原则还记得是什么了吗?六大原则指:单一职责原则(SRP),开放封闭原则(OCP),里氏替换原则( ...

  6. 浅谈UDF并行

    首先我们来看说明UDF并行流程的这个图 网格和求解数据分布和储存在计算节点(compute-node)处理器上,而对于GUI界面和主机(host)节点上不存储任何数据,主机节点将命令从GUI传递到0节 ...

  7. <每日 1 OJ> -内存文件系统

    蛮有意思的,主要考查链表和树结构的知识. 代码如下: ************************************************************************* ...

  8. centos 7 部署LDAP服务

    172.21.251.111 server172.21.251.112 node {SSHA}gGQUjzyJX+Oi7ZJCURCVmqq2UmtVWHZd一.环境准备关闭 selinux fire ...

  9. mysql关键字冲突

    在冲突的字段加上转移符,这样子就可以了: insert into test_table (wind_code,name,`read`,creade_time) values (?,?,?,?) (注意 ...

  10. web3 编译部署调用合约

    //导入solc 编译器 let solc = require('solc') let fs = require('fs') //读取合约 let sourceCode = fs.readFileSy ...