python设计模式--责任链模式

责任链模式

将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求;通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理。

例如:请假

from abc import ABCMeta, abstractmethod

#  抽象处理者
class Handler(metaclass=ABCMeta):
    @abstractmethod
    def handler_leave(self, day):
        pass

#   具体处理者
class GeneralManager(Handler):
    def handler_leave(self, day):
        if day < 10:
            print("总经理准假%d天" % day)
        else:
            print("你还是辞职吧")

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

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

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

    def handler_leave(self, day):
        if day <= 3:
            print("项目主管准假%d天" % day)
        else:
            print("项目主管职权不足")
            self.next.handler_leave(day)

#   客户端
day = 12
h = ProjectDirector()
h.handler_leave(day)

责任链模式有几个要点:

  • 一个对象中含有另一个对象的引用以此类推形成链条
  • 每个对象中应该有明确的责任划分即处理请求的条件
  • 链条的最后一节应该设计成通用请求处理,以免出现漏洞
  • 请求应该传入链条的头部
posted @ 2021-04-02 16:00  MrSatan  阅读(99)  评论(0)    收藏  举报