定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求
直到有一个对象处理它为止
使用场景:有多个对象可以处理一个请求,哪个对象处理由时间运行时决定。在不明确接受者的情况下,向多个对象中的一个提交一个请求
有点:降低耦合度:一个对象无需知道是其他哪一个对象处理其请求
代码例子:
"""
责任链模式
"""
from abc import abstractmethod, ABCMeta
class Handler(metaclass=ABCMeta):
@abstractmethod
def handler_leave(self, day):
pass
# 总经理审批
class GenaralHandler(Handler):
def handler_leave(self, day):
if day <= 10:
print('总经理批准你%s天假,好好去玩吧' % day)
else:
print('你干脆辞职了吧')
# 部门经理审批
class DepartmentHandler(Handler):
def __init__(self):
self.upHandler = GenaralHandler()
def handler_leave(self, day):
if day <= 7:
print('部门经理批准你%s天假,好好去玩吧' % day)
else:
print('你请假超过七天,我无权受理,你去找总经理吧')
self.upHandler.handler_leave(day)
# 项目主管审批
class ProjectHandler(Handler):
def __init__(self):
self.upHandler = DepartmentHandler()
def handler_leave(self, day):
if day <= 3:
print('项目主管批准你%s天假,好好去玩吧' % day)
else:
print('你请假超过三天,我无权受理,你去找部门经理审批吧')
self.upHandler.handler_leave(day)
if __name__ == '__main__':
h = ProjectHandler();
h.handler_leave(5)
输出结果:
/Users/lyf/PycharmProjects/WebFramework/venv/bin/python /Users/lyf/PycharmProjects/WebFramework/gof/zrl.py
你请假超过三天,我无权受理,你去找部门经理审批吧
部门经理批准你5天假,好好去玩吧
Process finished with exit code 0