浅析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使用Tkinter显示网络图片的方法
Apr 24 Python
K-近邻算法的python实现代码分享
Dec 09 Python
django中的HTML控件及参数传递方法
Mar 20 Python
Python实现针对给定单链表删除指定节点的方法
Apr 12 Python
numpy判断数值类型、过滤出数值型数据的方法
Jun 09 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
Python绘制全球疫情变化地图的实例代码
Apr 20 Python
Python Opencv图像处理基本操作代码详解
Aug 31 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
如何在Python中创建二叉树
Mar 30 Python
python3 删除所有自定义变量的操作
Apr 08 Python
基于Python实现的购物商城管理系统
Apr 27 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将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
javascript OFFICE控件测试代码
2009/12/08 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
python文件写入实例分析
2015/04/08 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
美国五金商店:Ace Hardware
2018/03/27 全球购物
你所知道的集合类都有哪些?主要方法?
2012/12/31 面试题
大学生最新职业生涯规划书范文
2014/01/12 职场文书
会计专业自我评价
2014/02/12 职场文书
小学生母亲节演讲稿
2014/05/07 职场文书
法律系毕业生求职信
2014/05/28 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
python 爬取华为应用市场评论
2021/05/29 Python
Python socket如何解析HTTP请求内容
2022/02/12 Python
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL