首页 > 编程语言 > 详细

python 职责链模式

时间:2019-12-09 23:17:37      阅读:114      评论:0      收藏:0      [点我收藏+]

模式定义

责任链模式(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)

 

 

python 职责链模式

原文:https://www.cnblogs.com/whnba/p/12013681.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!