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

来源:互联网 发布:手机网络赚钱资源 编辑:程序博客网 时间:2024/05/01 21:03

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

 

职责链模式,用于分级审查。这里给出对于请求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 divisionfrom __future__ import print_functionfrom __future__ import unicode_literalsfrom future_builtins import *class Request(object):    def __init__(self, name,level):        self.name=name        self.level=level        self.ls=list()        passclass 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        passclass 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)        passclass 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      


 

运行结果:

原创粉丝点击