博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
责任链模式
阅读量:5245 次
发布时间:2019-06-14

本文共 2121 字,大约阅读时间需要 7 分钟。

 

模式说明

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止,这就是职责链模式。

模式结构图

程序示例

说明:处理请假条,不同职位的领导处理不同天数的假条

代码:

class LeaveRequest(object):    def __init__(self, num, name):        self._num = num        self._name=name    def getnum(self):        return self._num    def getname(self):        return self._nameclass Handler(object):    def SetNextHandler(self,handler):        self._nextHandler=handler        def HandleRequest(self,request):        passclass Instructor(Handler):    def HandleRequest(self, request):        if request.getnum()<=3:            print 'instructor handle %s\'s leave request:%s' % (request.getname(),request.getnum())        else:            self._nextHandler.HandleRequest(request)class DepartmentHead(Handler):    def HandleRequest(self, request):        if request.getnum()<=5:            print 'department head handle %s\'s leave request:%s' % (request.getname(),request.getnum())        else:            self._nextHandler.HandleRequest(request)class Dean(Handler):    def HandleRequest(self, request):        if request.getnum()<=10:            print 'Dean head handle %s\'s leave request:%s' % (request.getname(),request.getnum())        else:            self._nextHandler.HandleRequest(request)class President(Handler):    def HandleRequest(self, request):        if request.getnum()<=15:            print 'President head handle %s\'s leave request:%s' % (request.getname(),request.getnum())        else:            self._nextHandler.HandleRequest(request)if __name__=='__main__':    president = President()    dean = Dean()    dean.SetNextHandler(president)    department = DepartmentHead()    department.SetNextHandler(dean)    instructor=Instructor()    instructor.SetNextHandler(department)    request = LeaveRequest(8,'wang')    instructor.HandleRequest(request)    request = LeaveRequest(12,'chen')    dean.HandleRequest(request)

运行结果:

参考来源:

http://www.cnblogs.com/chenssy/p/3679190.html

http://www.cnblogs.com/wuyuegb2312/archive/2013/04/09/3008320.html

http://www.cnblogs.com/Terrylee/archive/2006/07/17/334911.html

 

转载于:https://www.cnblogs.com/Siny0/p/11155911.html

你可能感兴趣的文章
计算机网络之面试常考
查看>>
Linux 简介
查看>>
TFS(Team Foundation Server)使用经验
查看>>
安装过redis集群,重新做集群办法:
查看>>
iOS-label出现未知边框线的bug
查看>>
HDU 2087 剪花布条 (KMP 不允许重叠的匹配)
查看>>
Ant build ${renderscript.opt.level}问题解决方案
查看>>
JS无刷新省市两级联动下拉列表
查看>>
完成登录与注册页面的前端
查看>>
关于对多层嵌套的json字符串取目标值的问题
查看>>
安全密码
查看>>
php的serialize()函数和unserialize()函数
查看>>
Tomcat学习过程2
查看>>
线程同步辅助类CyclicBarrier
查看>>
ACM题目————小A的计算器
查看>>
Hibernate的实体类为什么需要实现 java.io.Serializable 接口
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
Min Stack
查看>>
老鸟的Python入门教程
查看>>