责任链模式

模式说明

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

模式结构图

程序示例

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

代码:

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._name

class Handler(object):
    def SetNextHandler(self,handler):
        self._nextHandler=handler
    
    def HandleRequest(self,request):
        pass

class 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/cotton/p/3935053.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值