责任链模式----设计模式-------python

xiaoxiao2021-02-28  27

''' 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)
转载请注明原文地址: https://www.6miu.com/read-2500222.html

最新回复(0)