责任链模式的类,也是大开眼界啊~~~ https://www.cnblogs.com/alex3714/p/5760582.html

通过每个子类定义一个_successer 来关联自己的下一个人是谁.

当审批每一层为一个对象时,

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3
 4
 5 class BaseHandler(object):
 6     '''处理基类'''
 7
 8     def successor(self, successor):
 9         # 与下一个责任者关联
10         self._successor = successor
11
12
13 class RequestHandlerL1(BaseHandler):
14     '''第一级请求处理者'''
15     name = "TeamLeader"
16
17     def handle(self, request):
18         if request < 500:
19             print("审批者[%s],请求金额[%s],审批结果[审批通过]" % (self.name, request))
20         else:
21             print("\033[31;1m[%s]无权审批,交给下一个审批者\033[0m" % self.name)
22             self._successor.handle(request)
23
24
25 class RequestHandlerL2(BaseHandler):
26     '''第二级请求处理者'''
27     name = "DeptManager"
28
29     def handle(self, request):
30         if request < 5000:
31             print("审批者[%s],请求金额[%s],审批结果[审批通过]" % (self.name, request))
32         else:
33             print("\033[31;1m[%s]无权审批,交给下一个审批者\033[0m" % self.name)
34             self._successor.handle(request)
35
36
37 class RequestHandlerL3(BaseHandler):
38     '''第三级请求处理者'''
39     name = "CEO"
40
41     def handle(self, request):
42         if request < 10000:
43             print("审批者[%s],请求金额[%s],审批结果[审批通过]" % (self.name, request))
44         else:
45             print("\033[31;1m[%s]要太多钱了,不批\033[0m" % self.name)
46             # self._successor.handle(request)
47
48
49 class RequestAPI(object):
50     h1 = RequestHandlerL1()
51     h2 = RequestHandlerL2()
52     h3 = RequestHandlerL3()
53
54     h1.successor(h2)
55     h2.successor(h3)
56
57     def __init__(self, name, amount):
58         self.name = name
59         self.amount = amount
60
61     def handle(self):
62         '''统一请求接口'''
63         self.h1.handle(self.amount)
64
65
66 if __name__ == "__main__":
67     r1 = RequestAPI("Alex", 30000)
68     r1.handle()
69     print(r1.__dict__)
70     # [TeamLeader]无权审批, 交给下一个审批者
71     # [DeptManager]无权审批, 交给下一个审批者
72     # [CEO] 要太多钱了, 不批
73     # {'name': 'Alex', 'amount': 30000}

每一个审批层为单独对象

但审批每一层为多个对象时,但是还需要具体场景。

但是感觉只需要把 BaseHandler 的 self._successor.append(successor), 然后把每一个子类的handle做遍历处理,应该就可以了~~~

这个需要具体问题具体分析,不过这种通过定义使得子类有关联关系的方法,还是很不错的想法~~~又学一招~~~完美~~哈哈

转载于:https://www.cnblogs.com/shuo-yang0459/p/10437382.html

【python 类】【部分转发】设计模式 -- 责任链模式 (类之间的联动)相关推荐

  1. java责任链模式审批请假_Java设计模式-责任链模式

    Java设计模式-责任链模式 Java版本:jdk1.8 IDE:IDEA 一 前言 本文介绍责任链模式以及Java下的实现. 二 概念 1.什么是责任链模式 责任链模式(Chain of Respo ...

  2. 设计模式-责任链模式~晚霞

    Chain of Responsibility Pattern Title Module Category Tags Chain of Responsibility chain-of-responsi ...

  3. Java设计模式-责任链模式

    Java设计模式-责任链模式,我想这是值得你了解一下下的啦. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持 ...

  4. 设计模式--责任链模式--Java实现

    设计模式–责任链模式–Java实现 责任链模式–链式数据结构–内存消耗–Java的awt事件一开始用责任链模式后来改为观察者模式–为什么呢?–现在的应用–dom事件–异常处理机制-过滤器链–等等 学习 ...

  5. 理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式丨C++后端开发丨Linux服务器开发丨web服务器

    理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式 1. 开闭.单一职责.里氏替换.接口隔离等设计原则 2. 随处可见的模板方法 3. nginx中核心设计模式 责任链模式 4. 责 ...

  6. 一起学设计模式 - 责任链模式

    责任链模式(ChainOfResponsibilityPattern)属于 行为型模式的一种,将请求沿着一条链传递,直到该链上的某个对象处理它为止. 概述 定义如下:一个请求有多个对象来处理,这些对象 ...

  7. 大话设计模式—责任链模式

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为 ...

  8. 设计模式 | 责任链模式及典型应用

    本文的主要内容: 介绍责任链模式 请假流程示例 责任链模式总结 源码分析Tomcat Filter中的责任链模式 责任链模式 一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程 ...

  9. 设计模式—责任链模式

    原文作者:C语言中文网 原文地址:责任链模式(职责链模式)详解 目录 1.模式的定义与特点 2.模式的结构与实现 在现实生活中,一个事件需要经过多个对象处理是很常见的场景.例如,采购审批流程.请假流程 ...

  10. 设计模式 责任链模式

    责任链模式 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计 ...

最新文章

  1. 【机器学习】理解方差、偏差且其泛化误差的关系
  2. 使用1个盘三个5G分区创建12G逻辑卷
  3. [转]Java中Runtime.exec的一些事
  4. 在数组中找出3个数使得它们和为0
  5. javascript与DOM的渊源
  6. 企业如何进行数字化转型?
  7. 抽象工厂模块在开发中的应用
  8. Python元组是什么
  9. 没有bug队——加贝——Python 练习实例 31,32
  10. go redis 清空所有值_【大厂面试】面试官看了赞不绝口的Redis笔记二
  11. Wirkshark表达式
  12. 第五章---字符串+序列转化
  13. android sqllite数据库的多表联合查询
  14. 层次化防御保证企业门户网站安全
  15. nodejs学习笔记(上)
  16. linux 格式化查看json文件数据
  17. msys 中打开系统程序
  18. python 朋友圈点赞收费吗_朋友圈点赞会收费吗,人工代刷微信点赞怎么操作
  19. C/C++经典算法——约瑟夫问题
  20. ASEMI快恢复二极管RL257参数,RL257图片,RL257应用

热门文章

  1. php内置函数什么语言,语言构造和PHP中的“内置”函数有什么区别?
  2. mysql5.7 gtid问题_MySQL 5.7.5: 新语法WAIT_FOR_EXECUTED_GTID_SET 及存在的问题-阿里云开发者社区...
  3. chown无效的用户mysql_求大神指引,安装MYSQL时执行chown指令出错,已经创建组和用户。local中并没有找到mysql。用find找过路径...
  4. 已经编译好的OpenCV4.5.1----win10(cuda10.0 cudnn7.6.5)
  5. linux中副规则_linux中命名规则_学习笔记
  6. C/C++[codeup 1929,]日期处理
  7. C/C++[结构体]
  8. 判断iOS机器是否支持TouchId, FaceId
  9. 易筋SpringBoot 2.1 | 第一篇:构建第一个SpringBoot工程
  10. 如何提升沟通技能与提出解决方案