<Python设计模式>-责任链模式

文章目录

1 概述

使多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象链成一条链,并沿着这条链传递该请求,直至有一个对象处理它为止

生活中的实例:公司员工请假的处理流程:
如果请假小于等于三天,可以找项目经理请假
请假小于等于五天,可以找部门经理请假
请假小于等于十天,可以找总经理请假

对于请假这个类,定义一个处理器请假的接口类,总经理,部门经理和项目经理都要继承这个接口,在运行时决定哪个类处理这个请求

角色

  • 抽象处理者
  • 具体处理者
  • 客户端

优势

  • 有多个对象可以处理同一个请求,哪个对象处理由运行时决定
  • 在不明确接收者的情况下,向多个对象中的一个提交一个请求,一般都是把请求给到第一个级别的类,比如请假的例子,把所有请假信息先给项目经理
  • 降低耦合度:一个对象无需知道是其他哪个对象处理其请求

2 代码实现

from abc import ABCMeta,abstractmethod

class Handler(metaclass=ABCMeta):
    @abstractmethod
    def handle_leave(self,day):
        pass


class GeneralManager(Handler):
    def handle_leave(self,day):
        if day <= 10:
            print("总经理准假%d天"%day)
        else:
            print("你还是辞职吧")

class DepartmentManager(Handler):
    def __init__(self):
        self.next = GeneralManager()

    def handle_leave(self,day):
        if day <= 5:
            print("部门经理准假%d天"%day)
        else:
            print("部门经理职权不足")
            self.next.handle_leave(day)

class ProjectManager(Handler):
    def __init__(self):
        self.next = DepartmentManager()
    def handle_leave(self,day):
        if day <= 3:
            print("项目经理准假%d天"%day)
        else:
            print("项目经理职权不足")
            self.next.handle_leave(day)



pm = ProjectManager()
pm.handle_leave(3)
print(" ")
pm.handle_leave(7)
print(" ")
pm.handle_leave(11)

"""
OUT:
项目经理准假3天
 
项目经理职权不足
部门经理职权不足
总经理准假7天
 
项目经理职权不足
部门经理职权不足
你还是辞职吧
"""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kobe_OKOK_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值