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)
  • 相关阅读:
    centos7 安装 nginx
    centos7 安装 mysql
    centos7 安装 python3.7
    nginx添加到系统命令中
    Java多线程6-线程让步
    Java多线程5-线程等待与唤醒
    Java多线程4-synchronized关键字
    Java多线程3-Thread中start和run方法的区别
    Java多线程-2-常用的实现多线程的两种方式
    java多线程1-基础概念
  • 原文地址:https://www.cnblogs.com/whnba/p/12013681.html
Copyright © 2011-2022 走看看