浅析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的gevent框架的入门教程
Apr 29 Python
Python中函数的参数传递与可变长参数介绍
Jun 30 Python
python分析作业提交情况
Nov 22 Python
python中datetime模块中strftime/strptime函数的使用
Jul 03 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
Python实现分段线性插值
Dec 17 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
Keras自动下载的数据集/模型存放位置介绍
Jun 19 Python
python 装饰器的基本使用
Jan 13 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获取网卡地址的代码
2008/04/09 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
2011/08/09 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
vue.js的安装方法
2017/05/12 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
python插入数据到列表的方法
2015/04/30 Python
自己使用总结Python程序代码片段
2015/06/02 Python
深入理解Django中内置的用户认证
2017/10/06 Python
python编写Logistic逻辑回归
2020/12/30 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
预备党员思想汇报
2014/01/08 职场文书
责任担保书范文
2014/05/21 职场文书
长城的导游词
2015/01/30 职场文书
中班上学期个人总结
2015/02/12 职场文书
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS