设计模式十六(职责链模式,python实现)

原理请参考相应书籍,这里直接给例子

 

职责链模式,用于分级审查。这里给出对于请求Request的处理(分等级的事故)。职责链上涉及到:

LevelOne 县政府

LevelTwo 市政府

LevelThree 省政府

 

 

# -*- coding: utf-8 -*-
#######################################################
# 
# chain.py
# Python implementation of the Class Client
# Generated by Enterprise Architect
# Created on:      13-十二月-2012 10:31:54
# 
#######################################################

from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from future_builtins import *

class Request(object):
    def __init__(self, name,level):
        self.name=name
        self.level=level
        self.ls=list()
        pass



class Handler(object):
    """This class defines an interface for handling requests and optionally implements
    the successor link.
    """
    work = '正在处理'
    up='请转上级处理'
    down='请转下级处理'
    idle='目前没有规定该类问题如何处理'
    
    #m_Handler= Handler()


    def __init__(self, name='None',level=0):
        self.name=name
        self.level=level
        self.nextHandler=None
        pass
    def SetNext(self,nextHandler):
        self.nextHandler=nextHandler

    def HandleRequest(self, request):
        str=self.name+'----'+ '收到请求内容:'+request.name+'  等级:%d'%request.level +'----'
        if request.level==self.level:
            request.ls.append(str+self.work)
            pass
        elif self.nextHandler!=None:
            if request.level<self.level:
                request.ls.append(str+self.down)
                pass
            else:
                request.ls.append(str+self.up)
                pass
            self.nextHandler.HandleRequest(request)
            pass
        else:
            request.ls.append(str+self.idle)
            pass
        pass

class LevelOne(Handler):
    """This class defines an interface for handling requests and optionally implements
    the successor link.
    """
    def __init__(self, name='县政府',level=1):
        super(LevelOne,self).__init__(name,level)
        pass

 

class LevelTwo(Handler):
    """This class defines an interface for handling requests and optionally implements
    the successor link.
    """
    def __init__(self, name='市政府',level=2):
        super(LevelTwo,self).__init__(name,level)
        pass

class LevelThree(Handler):
    """This class defines an interface for handling requests and optionally implements
    the successor link.
    """
    def __init__(self, name='省政府',level=3):
        super(LevelThree,self).__init__(name,level)
        pass
    pass

#客户端  
    
class Client:
    """This class initiates the request to a ConcreteHandler object on the chain.
    """
    m_HandlerOne= LevelOne()
    m_HandlerTwo=LevelTwo()
    m_HandlerThree=LevelThree()
    
    m_HandlerOne.SetNext(m_HandlerTwo)
    m_HandlerTwo.SetNext(m_HandlerThree)
    

  #一级事故  
    m_Request=Request('事故',1)
    m_HandlerOne.HandleRequest(m_Request)
    for item in m_Request.ls:
        print (item)
        pass
    print('\n')
#二级事故
    m_Request=Request('事故',2)
    m_HandlerOne.HandleRequest(m_Request)
    for item in m_Request.ls:
        print (item)
        pass    
    print('\n')    
#三级事故
    m_Request=Request('事故',3)
    m_HandlerOne.HandleRequest(m_Request)
    for item in m_Request.ls:
        print (item)
        pass  
    print('\n') 
#四级事故 
    m_Request=Request('事故',4)
    m_HandlerOne.HandleRequest(m_Request)
    for item in m_Request.ls:
        print (item)
        pass    
  


 

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值