思想:层级处理,直到某一级可以处理
意图:
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
适用性:
有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
可处理一个请求的对象集合应被动态指定。
案例一:
#_*_coding:utf-8_*_
# 职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,
从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,
直到有一个对象处理它为止。
# 适用场景:
# 1、有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定;
# 2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求;
# 3、处理一个请求的对象集合应被动态指定。
class BaseHandler(object):
'''处理基类'''
def successor(self,successor):
#与下一个责任者关联
self._successor = successor
class RequestHandlerL1(BaseHandler):
'''第一级请求处理者'''
name = "TeamLeader"
def handle(self,request):
if request < 500 :
print("审批者[%s],请求金额[%s],审批结果[审批通过]"%(self.name,request))
else:
print("\033[31;1m[%s]无权审批,交给下一个审批者\033[0m" %self.name)
self._successor.handle(request)
class RequestHandlerL2(BaseHandler):
'''第二级请求处理者'''
name = "DeptManager"
def handle(self,request):
if request < 5000 :
print("审批者[%s],请求金额[%s],审批结果[审批通过]"%(self.name,request))
else:
print("\033[31;1m[%s]无权审批,交给下一个审批者\033[0m" %self.name)
self._successor.handle(request)
class RequestHandlerL3(BaseHandler):
'''第三级请求处理者'''
name = "CEO"
def handle(self,request):
if request < 10000 :
print("审批者[%s],请求金额[%s],审批结果[审批通过]"%(self.name,request))
else:
print("\033[31;1m[%s]要太多钱了,不批\033[0m"%self.name)
#self._successor.handle(request)
class RequestAPI(object):
h1 = RequestHandlerL1()
h2 = RequestHandlerL2()
h3 = RequestHandlerL3()
h1.successor(h2)
h2.successor(h3)
def __init__(self,name,amount):
self.name = name
self.amount = amount
def handle(self):
'''统一请求接口'''
self.h1.handle(self.amount)
if __name__ == "__main__":
r1 = RequestAPI("Alex",30000)
r1.handle()
print(r1.__dict__)
案例二:
class TeamLeader:
def __init__(self,name='Teamleader',successor=None):
self.__name=name
self.__successor=successor
def handle(self,day):
if day<=1:
print("回去休息吧")
else:
print("我管不了,你去找部门领导处理吧")
self.__successor.handle(day)
class DaptLeader:
def __init__(self,name='DaptLeader',successor=None):
self.__name=name
self.__successor=successor
def handle(self,day):
if day<3:
print("好吧,你回去好好休息")
else:
print("请假时间太长了,我管不了,你去找上面领导吧")
self.__successor.handle(day)
class Boss:
def __init__(self,name='Boss'):
self.__name=name
def handle(self,day):
if day<=5:
print("好好休息,公司还很需要你啊")
else:
print("你可以另谋高就了")
boss=Boss()
daptleader=DaptLeader(successor=boss)
teamleader=TeamLeader(successor=daptleader)
# 1.请假1天,teamleader就可以批准
teamleader.handle(1)
# 2.请假2天,需要daptleader可以批准
teamleader.handle(2)
# 3.请假3天,需要boss批准
teamleader.handle(3)
# 4.请假超过5天,公司无法批准
teamleader.handle(6)
'''
运行结果:
'''
# 1.请假1天,teamleader就可以批准
回去休息吧
# 2.请假2天,需要daptleader可以批准
我管不了,你去找部门领导处理吧
好吧,你回去好好休息
# 3.请假3天,需要boss批准
我管不了,你去找部门领导处理吧
请假时间太长了,我管不了,你去找上面领导吧
好好休息,公司还很需要你啊
# 4.请假超过5天,公司无法批准
我管不了,你去找部门领导处理吧
请假时间太长了,我管不了,你去找上面领导吧
你可以另谋高就了
'''