定义: 责任链模式
内容: 使多个对象有机会处理请求, 从而 避免请求的发送者和接受者之间的耦合关系;
将这些对象连成一条链, 并沿着这条链传递该请求, 直到有一个对象处理它为止;
角色:
抽象处理者( handler)
具体处理者
客户端;
适用场景:
1. 有多个对象可以处理 一个请求, 哪个 对象处理由运行时决定;
2. 在不明确接受者的情况下, 向多个对象中的一个提交一个请求
优点:
降低耦合度: 一个对象无需知道 是其他哪一个对象处理其请求;
代码实例
底层代码
from abc import ABCMeta, abstractmethod
class Handler(metaclass= ABCMeta):
@abstractmethod
def handle_leave(self, day):
pass
class GeneralManager(Handler):
def handle_leave(self, day):
if day <= 10:
print('General manger approve % d day' % day )
else:
print(' you may quit the job')
class DepartmentManager(Handler):
def __init__(self):
self.next = GeneralManager()
def handle_leave(self, day):
if day <= 5 :
print(' department manager approve %d ' % day )
else:
print(' department manager properity not enough ')
self.next.handle_leave(day)
class ProjectDirector(Handler):
def __init__(self):
self.next = DepartmentManager()
def handle_leave(self, day):
if day <= 3:
print('Project manager approve %d' % day)
else:
print(' Project manager properity not enough' )
self.next.handle_leave(day)
高层代码
day = 9
h = ProjectDirector()
h.handle_leave(day)