zoukankan      html  css  js  c++  java
  • 设计模式之责任链模式

    设计模式之责任链模式

     例一:

    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('总经理批准%s天假期'%days)
            else:
                print('你想多了吧......')
    
    class DepartmentManagerHandler(BaseHandler):
        def __init__(self):
            self.leader = GeneralManagerHandler()
        def handle_leave(self,days):
            if days < 5:
                print('部门经理批准%s天假期'%days)
            else:
                print('部门经理无权配准%s天假,需要向总经理申请'%days)
                self.leader.handle_leave(days)
    
    class ProjectDirectorHandler(BaseHandler):
        def __init__(self):
            self.leader = DepartmentManagerHandler()
        def handle_leave(self,days):
            if days < 3:
                print('项目主管批准%s天假期'%days)
            else:
                print('项目主管无权配准%s天假,需要向部门经理经理申请' % days)
                self.leader.handle_leave(days)
    
    employee = ProjectDirectorHandler()
    employee.handle_leave(15)

     例二:

    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('这是给body的函数')
    
    def func_div():
        print('这是给div的函数')
    
    def func_span():
        print('这是给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()
  • 相关阅读:
    Spring.NET学习笔记
    开源项目地址
    委托的实现匿名函数和朗姆达表达式
    c#事件与委托
    c# 时间戳转换
    List 排序
    DDD的好文章
    【转】理解JMeter聚合报告(Aggregate Report)
    【转】JMeter 通过 JDBC 访问 Oracle 和 MySQL
    【转】使用JMeter测试你的EJB
  • 原文地址:https://www.cnblogs.com/aadmina/p/8977864.html
Copyright © 2011-2022 走看看