'''
CHAIN OF RESPONSIBLEITY——责任链模式?
晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的MM哎,找张纸条,写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”,纸条就一个接一个的传上去了,糟糕,传到第一排的MM把纸条传给老师了,听说是个老处女呀,快跑!
责任链模式:在责任链模式中,很多对象由每一个对象对其下家的引用而接 起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。
:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
角色:
抽象处理者(Handler)
具体处理者(ConcreteHandler)
客户端(Client)
例:
请假部门批准:leader—>部门经理—>总经理
Javascript事件浮升机制
适用场景:
有多个对象可以处理一个请求,哪个对象处理由运行时决定
在不明确接收者的情况下,向多个对象中的一个提交一个请求
优点:
降低耦合度:一个对象无需知道是其他哪一个对象处理其请求
缺点:
请求不保证被接收:链的末端没有处理或链配置错
'''
#======================1==============================
# from abc import ABCMeta,abstractmethod
#
# class Handler(metaclass=ABCMeta):
# @abstractmethod
# def handle_level(self,day):
# pass
#
# class GeneralManagerHandler(Handler):
# def handle_level(self,day):
# if day < 10:
# print("总经理批准%s天假" % day)
# return True
# else:
# print("呵呵")
# return False
#
# class DepartmentManagerHandler(Handler):
# def __init__(self):
# self.successor = GeneralManagerHandler()
# def handle_level(self,day):
# if day < 7:
# print("部门经理批准%s天假" % day)
# else:
# print("部门经理,无权准假")
# return self.successor.handle_level(day)
#
# class ProjectDirectorHandler(Handler):
# def __init__(self):
# self.successfor=DepartmentManagerHandler()
# def handle_level(self,day):
# if day < 3:
# print("项目主管批准%s天假" % day)
# return True
# else:
# print("项目主管无权准假")
# return self.successfor.handle_level(day)
#
#
# day =8
# h =ProjectDirectorHandler()
# print(h.handle_level(day))
#====================2===================
# from abc import ABCMeta,abstractmethod
#
# class Handler(metaclass=ABCMeta):
# @abstractmethod
# def add_event(self,func):
# pass
#
# @abstractmethod
# def handle(self):
# pass
#
# class BodyHandler(Handler):
# def __init__(self):
# self.func=None
#
# def add_event(self,func):
# self.func=func
# def handle(self):
# if self.func:
# return self.func()
# else:
# print("已经到达最后一集,无法处理。")
#
#
# class ElementHandler(Handler):
# def __init__(self,successor):
# self.func=None
# self.successor=successor
#
# def add_event(self,func):
# self.func=func
# def handle(self):
# if self.func:
# return self.func
# else:
# return self.successor.handle()
#
# body={"type":"body","name":"body","children":[],"father":None}
# div={"type":"div","name":"div","children":[],"father":body}
#
# a={"type":"a","name":"a","children":[],"father":div}
#
# body["children"].append(div)
# div["children"].append(a)
#
# body["event_handler"] =BodyHandler()
# div["event_handler"]=ElementHandler(div["father"]["event_handler"])
# a["event_handler"]=ElementHandler(a["father"]["event_handler"])
#
# def attach_event(element,func):
# element["event_handler"].add_event(func)
#
# def func_a():
# print("Zhe shi gei a de function")
#
# def func_div():
# print("zhe shi gei div de function")
# def func_body():
# print("zheshi gei body de hanshu")
#
# attach_event(a,func_a)
# attach_event(div,func_div)
# attach_event(body,func_body)
#
# a["event_handler"].handle()()
#=======================3=====================================
from abc import ABCMeta,abstractmethod
class Handler(metaclass=ABCMeta):
@abstractmethod
def auditing(self,profit):
pass
class GeneralManagerHandler(Handler):
def auditing(self,profit):
if profit < 1000:
print("好好奋斗,争取在得到%s" %profit)
else:
print("下次再说吧")
class DepartmentManagerHandler(Handler):
def __init__(self):
self.lead=GeneralManagerHandler()
def auditing(self,profit):
if profit <500:
print("好好奋斗,奖金少不了,你的 %s" % (profit-100))
else:
return self.lead.auditing(profit)
class HeadMan(Handler):
def __init__(self):
self.lead=DepartmentManagerHandler()
def auditing(self,profit):
if profit < 200:
print("走一块喝酒去,一人50元")
else:
return self.lead.auditing(profit)
profit=330
h=HeadMan()
h.auditing(profit)