浅析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 相关文章推荐
Django集成百度富文本编辑器uEditor攻略
Jul 04 Python
Python专用方法与迭代机制实例分析
Sep 15 Python
Python实现处理管道的方法
Jun 04 Python
python如何在终端里面显示一张图片
Aug 17 Python
python进行两个表格对比的方法
Jun 27 Python
彻彻底底地理解Python中的编码问题
Oct 15 Python
机器学习实战之knn算法pandas
Jun 22 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
使用tensorflow进行音乐类型的分类
Aug 14 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
python - asyncio异步编程
Apr 06 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
10条PHP高级技巧[修正版]
2011/08/02 PHP
php存储过程调用实例代码
2013/02/03 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
js获取事件源及触发该事件的对象
2013/10/24 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
Javascript中的 “&amp;” 和 “|” 详解
2017/02/02 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python进行TCP端口扫描的实现
2018/12/21 Python
python如何使用腾讯云发送短信
2020/09/17 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
销售总监工作职责
2013/11/21 职场文书
业务内勤岗位职责
2014/04/30 职场文书
争先创优演讲稿
2014/09/15 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技