责任链模式
python原创责任链模式大约 1 分钟约 361 字
将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求;通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理。
实例
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)
责任链模式有几个要点
- 一个对象中含有另一个对象的引用以此类推形成链条
- 每个对象中应该有明确的责任划分即处理请求的条件
- 链条的最后一节应该设计成通用请求处理,以免出现漏洞
- 请求应该传入链条的头部