Chain of Responsibility Design Patterns
Example 1:
from abc import ABCMeta,abstractmethod class BaseHandler(metaclass=ABCMeta): @abstractmethod def handle_leave(self,days): pass class GeneralManagerHandler(BaseHandler): def handle_leave(self,days): if days < 10 : print ( ' General manager approves %s days of vacation ' % days) else : print ( ' You think too much... ' ) class DepartmentManagerHandler(BaseHandler): def __init__(self): self.leader = GeneralManagerHandler() def handle_leave(self,days): if days < 5 : print ( ' Department manager approves %s days leave ' % days) else : print ( ' Department manager is not authorized to register %s days leave, Need to apply to the general manager ' % days) self.leader.handle_leave(days) class ProjectDirectorHandler(BaseHandler): def __init__(self): self.leader = DepartmentManagerHandler() def handle_leave(self,days): if days < 3 : print ( ' Project manager approves %s days leave ' % days) else : print ( ' Project manager is not authorized to register %s days leave, Need to apply to the department manager ' % days) self.leader.handle_leave(days) employee = ProjectDirectorHandler() employee.handle_leave(15)
Example 2:
from abc import ABCMeta,abstractmethod class BaseHandler(metaclass=ABCMeta): @abstractmethod def add_event(self,func): pass @abstractmethod def handle(self): pass class BodyHandler(BaseHandler): 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('ending......') class ElementHandler(BaseHandler): def __init__(self,leader): self.func = None self.leader = leader def add_event(self,func): self.func = func def handle(self): if self.func: return self.func() else: return self.leader.handle() body = {'type':'body','name':'body','children':[],'father':None,'event_handler':None} div = {'type':'div','name':'div','children':[],'father':body,'event_handler':None} span = {'type':'span','name':'span','children':[],'father':div,'event_handler':None} body['children'].append(div) div['children'].append(span) body['event_handler'] = BodyHandler() div['event_handler'] = ElementHandler(div['father']['event_handler']) span['event_handler'] = ElementHandler(span['father']['event_handler']) def bind_event(element,func): element['event_handler'].add_event(func) def func_body(): print ( ' This is the function for body ' ) def func_div(): print ( ' this is the function for div ' ) def func_span(): print ( ' this is the function for span ' ) bind_event(body,func_body) # bind_event(div,func_div) # bind_event(span,func_span) span['event_handler'].handle() div['event_handler'].handle() body['event_handler'].handle()