浅析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装饰器验证配置文件示例
Feb 24 Python
python妹子图简单爬虫实例
Jul 07 Python
Python用模块pytz来转换时区
Aug 19 Python
python使用邻接矩阵构造图代码示例
Nov 10 Python
Python给定一个句子倒序输出单词以及字母的方法
Dec 20 Python
python实现日志按天分割
Jul 22 Python
python Popen 获取输出,等待运行完成示例
Dec 30 Python
TFRecord格式存储数据与队列读取实例
Jan 21 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 Python
解决Jupyter NoteBook输出的图表太小看不清问题
Apr 16 Python
Python检测端口IP字符串是否合法
Jun 05 Python
Python Merge函数原理及用法解析
Sep 16 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 set_time_limit(0)长连接的实现分析
2010/03/02 PHP
JQuery autocomplete 使用手册
2010/04/01 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
js实现拖拽功能
2017/03/01 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python自动重试HTTP连接装饰器
2015/04/28 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
如何将整数int转换成字串String
2014/03/21 面试题
数据库笔试题
2013/05/09 面试题
项目建议书怎么写
2014/05/15 职场文书
工程材料采购方案
2014/05/18 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
亲属关系公证书样本
2015/01/23 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript