Chain of Responsibility Design Patterns

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()

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325127671&siteId=291194637