zoukankan      html  css  js  c++  java
  • python 职责链模式

    模式定义

    责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。 这种模式给予请求的类型,对请求的发送者和接收者进行解耦。

    这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

    UML类图

    职责链模式

    示例代码

    天气冷了,小明今天起来的比较晚不想去上班了。准备给公司请个假,公司的请假流程是这样的:

    0 < x < 3h 组长可以直接审批

    3h < x < 48h 部门领导审批

    48 < x 部门领导需要向boss汇报,让他审批

    '''
    代码示例
    
    天气冷了,小明今天起来的比较晚不想去上班了。准备给公司请个假,公司的请假流程是这样的:
    1:0 < x < 3h 组长可以直接审批
    2:3h < x < 48h 部门领导审批
    3:48 < x 部门领导需要向boss汇报,让他审批
    '''
    
    import abc
    
    
    class AbsLeader(abc.ABC):
    
        def __init__(self):
            self._next = None
    
        # 请假
        @abc.abstractmethod
        def leave(self): ...
    
        # 下一位处理者
        @property
        def next(self):
            if (not self._next):
                raise Exception("无处理对象")
            return self._next
    
        @next.setter
        def next(self, process):
            self._next = process
    
    
    class GroupLeader(AbsLeader):
        def leave(self, hour: float):
            if hour < 3:
                print("ok,请假组长批了")
            else:
                self.next.leave(hour)
    
    
    class DepartmentLeader(AbsLeader):
        def leave(self, hour):
            if hour < 48:
                print("ok,请假部门主管批了")
            else:
                self.next.leave(hour)
    
    
    class BossLeader(AbsLeader):
        def leave(self, hour):
            if hour >= 48:
                print("ok,请假boss批了")
    
    
    if __name__ == "__main__":
    
        # 组建责任链
        groupleader = GroupLeader()
        department = DepartmentLeader()
        boos = BossLeader()
    
        groupleader.next = department
        department.next = boos
    
        # 请假1小时,组长处理
        groupleader.leave(1)
    
        # 请假45小时,部门处理
        groupleader.leave(45)
    
        # 请假66小时,boss处理
        groupleader.leave(66)
  • 相关阅读:
    PAIP.paip.手机离线ROOT过程总结
    paip.程序设计扫号器跑号器结果分类设计
    PAIP.测试硬盘的成色以及速率
    paip.httpd.conf 是空的.txt
    paip.c#.nett 系统托盘动态图标闪烁图标
    paip.验证码识别反馈法提高识别率
    paip.提升用户体验找回密码的设
    paip.sql2008 客户端软件绿色版V319
    提升用户体验自动邮编提示与验证地址
    PAIP.提升性能---LISTBOX加载30万大数据量终结方案
  • 原文地址:https://www.cnblogs.com/whnba/p/12013681.html
Copyright © 2011-2022 走看看