【python 类】【部分转发】设计模式 -- 责任链模式 (类之间的联动)
责任链模式的类,也是大开眼界啊~~~ 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 类】【部分转发】设计模式 -- 责任链模式 (类之间的联动)相关推荐
- java责任链模式审批请假_Java设计模式-责任链模式
Java设计模式-责任链模式 Java版本:jdk1.8 IDE:IDEA 一 前言 本文介绍责任链模式以及Java下的实现. 二 概念 1.什么是责任链模式 责任链模式(Chain of Respo ...
- 设计模式-责任链模式~晚霞
Chain of Responsibility Pattern Title Module Category Tags Chain of Responsibility chain-of-responsi ...
- Java设计模式-责任链模式
Java设计模式-责任链模式,我想这是值得你了解一下下的啦. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持 ...
- 设计模式--责任链模式--Java实现
设计模式–责任链模式–Java实现 责任链模式–链式数据结构–内存消耗–Java的awt事件一开始用责任链模式后来改为观察者模式–为什么呢?–现在的应用–dom事件–异常处理机制-过滤器链–等等 学习 ...
- 理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式丨C++后端开发丨Linux服务器开发丨web服务器
理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式 1. 开闭.单一职责.里氏替换.接口隔离等设计原则 2. 随处可见的模板方法 3. nginx中核心设计模式 责任链模式 4. 责 ...
- 一起学设计模式 - 责任链模式
责任链模式(ChainOfResponsibilityPattern)属于 行为型模式的一种,将请求沿着一条链传递,直到该链上的某个对象处理它为止. 概述 定义如下:一个请求有多个对象来处理,这些对象 ...
- 大话设计模式—责任链模式
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为 ...
- 设计模式 | 责任链模式及典型应用
本文的主要内容: 介绍责任链模式 请假流程示例 责任链模式总结 源码分析Tomcat Filter中的责任链模式 责任链模式 一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程 ...
- 设计模式—责任链模式
原文作者:C语言中文网 原文地址:责任链模式(职责链模式)详解 目录 1.模式的定义与特点 2.模式的结构与实现 在现实生活中,一个事件需要经过多个对象处理是很常见的场景.例如,采购审批流程.请假流程 ...
- 设计模式 责任链模式
责任链模式 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计 ...
最新文章
- 【机器学习】理解方差、偏差且其泛化误差的关系
- 使用1个盘三个5G分区创建12G逻辑卷
- [转]Java中Runtime.exec的一些事
- 在数组中找出3个数使得它们和为0
- javascript与DOM的渊源
- 企业如何进行数字化转型?
- 抽象工厂模块在开发中的应用
- Python元组是什么
- 没有bug队——加贝——Python 练习实例 31,32
- go redis 清空所有值_【大厂面试】面试官看了赞不绝口的Redis笔记二
- Wirkshark表达式
- 第五章---字符串+序列转化
- android sqllite数据库的多表联合查询
- 层次化防御保证企业门户网站安全
- nodejs学习笔记(上)
- linux 格式化查看json文件数据
- msys 中打开系统程序
- python 朋友圈点赞收费吗_朋友圈点赞会收费吗,人工代刷微信点赞怎么操作
- C/C++经典算法——约瑟夫问题
- ASEMI快恢复二极管RL257参数,RL257图片,RL257应用
热门文章
- php内置函数什么语言,语言构造和PHP中的“内置”函数有什么区别?
- mysql5.7 gtid问题_MySQL 5.7.5: 新语法WAIT_FOR_EXECUTED_GTID_SET 及存在的问题-阿里云开发者社区...
- chown无效的用户mysql_求大神指引,安装MYSQL时执行chown指令出错,已经创建组和用户。local中并没有找到mysql。用find找过路径...
- 已经编译好的OpenCV4.5.1----win10(cuda10.0 cudnn7.6.5)
- linux中副规则_linux中命名规则_学习笔记
- C/C++[codeup 1929,]日期处理
- C/C++[结构体]
- 判断iOS机器是否支持TouchId, FaceId
- 易筋SpringBoot 2.1 | 第一篇:构建第一个SpringBoot工程
- 如何提升沟通技能与提出解决方案