浅析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进阶教程之动态类型详解
Aug 30 Python
python使用Flask框架获取用户IP地址的方法
Mar 21 Python
python使用PyGame模块播放声音的方法
May 20 Python
Django自定义认证方式用法示例
Jun 23 Python
python模块之sys模块和序列化模块(实例讲解)
Sep 13 Python
使用python获取csv文本的某行或某列数据的实例
Apr 03 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
Feb 11 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
Python字符串的15个基本操作(小结)
Feb 03 Python
python实现经典排序算法的示例代码
Feb 07 Python
变长双向rnn的正确使用姿势教学
May 31 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
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
js闭包的用途详解
2014/11/09 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
Python进阶之尾递归的用法实例
2018/01/31 Python
pandas数据处理进阶详解
2019/10/11 Python
python实现按首字母分类查找功能
2019/10/31 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
单位创先争优活动方案
2014/01/26 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
党支部承诺书
2015/01/20 职场文书
军训结束新闻稿
2015/07/17 职场文书
如何写好竞聘报告
2019/04/03 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android