博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【python 类】【部分转发】设计模式 -- 责任链模式 (类之间的联动)
阅读量:5329 次
发布时间:2019-06-14

本文共 2253 字,大约阅读时间需要 7 分钟。

责任链模式的类,也是大开眼界啊~~~ 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 = successor11 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 = name59         self.amount = amount60 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 协程, 异步IO Select 和 selectors 模块 多并发演示
查看>>
android SDK Manager更新不了,出现错误提示:"Failed to fetch URL..."!
查看>>
"NHibernate.Exceptions.GenericADOException: could not load an entity" 解决方案
查看>>
Visual Studio 2010 集成 SP1 补丁 制作 Visual Studio 2010 Service Pack 1 完整版安装光盘的方法...
查看>>
jmeter maven自动移动jar包windows 批处理命令
查看>>
奇偶排序Odd-even sort
查看>>
修改nvm镜像地址
查看>>
Intent StartActivityForResult()
查看>>
targetCompatibility = '1.7' sourceCompatibility = '1.7'
查看>>
Git---创建版本库
查看>>
设置程序图标-初识IOS
查看>>
string 常用方法
查看>>
Linux复制命令cp进阶
查看>>
Ubuntu 16.04 install R language
查看>>
HDFS源码分析之UnderReplicatedBlocks(一)
查看>>
小端模式
查看>>
百度小程序-map组件定位
查看>>
重构:将单例模式从业务类中完全解耦
查看>>
一步步学习微软InfoPath2010和SP2010--第二章节--表单需求:使用决策矩阵(2)--数据在哪里?...
查看>>
JDK自带的JVM性能监控工具jconsole的使用
查看>>