浅析Python 责任链设计模式


Posted in Python onSeptember 11, 2020

定义:

使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求直到有一个对象处理它为止

使用场景:

有多个对象可以处理一个请求,哪个对象处理由时间运行时决定。在不明确接受者的情况下,向多个对象中的一个提交一个请求

优点:

降低耦合度:一个对象无需知道是其他哪一个对象处理其请求

代码例子:

"""
责任链模式
"""
from abc import abstractmethod, ABCMeta


class Handler(metaclass=ABCMeta):
  @abstractmethod
  def handler_leave(self, day):
    pass


# 总经理审批
class GenaralHandler(Handler):
  def handler_leave(self, day):
    if day <= 10:
      print('总经理批准你%s天假,好好去玩吧' % day)
    else:
      print('你干脆辞职了吧')


# 部门经理审批
class DepartmentHandler(Handler):
  def __init__(self):
    self.upHandler = GenaralHandler()

  def handler_leave(self, day):
    if day <= 7:
      print('部门经理批准你%s天假,好好去玩吧' % day)
    else:
      print('你请假超过七天,我无权受理,你去找总经理吧')
      self.upHandler.handler_leave(day)


# 项目主管审批
class ProjectHandler(Handler):
  def __init__(self):
    self.upHandler = DepartmentHandler()

  def handler_leave(self, day):
    if day <= 3:
      print('项目主管批准你%s天假,好好去玩吧' % day)
    else:
      print('你请假超过三天,我无权受理,你去找部门经理审批吧')
      self.upHandler.handler_leave(day)


if __name__ == '__main__':
  h = ProjectHandler();
  h.handler_leave(5)

输出结果:

你请假超过三天,我无权受理,你去找部门经理审批吧

部门经理批准你5天假,好好去玩吧

以上就是浅析Python 责任链设计模式的详细内容,更多关于Python 责任链设计模式的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现windows下模拟按键和鼠标点击的方法
Mar 13 Python
python实现的jpg格式图片修复代码
Apr 21 Python
python使用wxPython打开并播放wav文件的方法
Apr 24 Python
Python查找函数f(x)=0根的解决方法
May 07 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 Python
PyTorch搭建一维线性回归模型(二)
May 22 Python
python 用所有标点符号分隔句子的示例
Jul 15 Python
keras 特征图可视化实例(中间层)
Jan 24 Python
python如何更新包
Jun 11 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 Python
编写python程序的90条建议
Apr 14 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 #Python
python实现邮件循环自动发件功能
Sep 11 #Python
Python 实现微信自动回复的方法
Sep 11 #Python
python 如何调用远程接口
Sep 11 #Python
Visual Studio code 配置Python开发环境
Sep 11 #Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 #Python
python如何实现图片压缩
Sep 11 #Python
You might like
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
PHP文件上传原理简单分析
2011/05/29 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python的移位操作实现详解
2019/08/21 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
我们的节日端午节活动方案
2014/03/02 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
长征观后感
2015/06/09 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python