原理请参考相应书籍,这里直接给例子
职责链模式,用于分级审查。这里给出对于请求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
运行结果: