设计模式之职责链模式

# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
"""
@author: Edgar
这是职责链模式的一个应用场景。(具体故事情节请见《大话设计模式》)

·职责链模式下,客户端只需要传递信号给系统,不需要知道系统安排谁处理,也不需要知道这
个人怎么处理信号的。
"""

class AbsManager(object):
    def __init__(self, name, rights=None):
        self.name = name
        #rights是字典,键是请假的类型,值是请假类型的上限值
        self.rights = rights
        self.superior = None
        
    def SetSuperior(self, superior):
        self.superior = superior
        
    def RequestApplications(self, request):
        if request[0] in self.rights and request[1] <= self.rights[request[0]]:
            print '{0}: {1}数量{2} 被批准'.format(self.name, request[0], \
                request[1])
        else:
            if(self.superior != None):
                print '我{0}无权处理,帮你提交给上级处理。'.format(self.name)
                self.superior.RequestApplications(request)
            else:
                print '请求无法被批准'
    
class CommonManager(AbsManager):
#小组经理类
    def __init__(self, name, rights={'请假':2}):
        super(CommonManager, self).__init__(name, rights)

class Majordoma(AbsManager):
#总监类
    def __init__(self, name, rights={'请假':5, '加薪':500}):
        super(Majordoma, self).__init__(name, rights)         
            
class GeneralManager(AbsManager):
#总经理类
    def __init__(self, name, rights={'请假':10, '加薪':1000}):
        super(GeneralManager, self).__init__(name, rights)
        
if __name__ == '__main__':
    xiaoyi = CommonManager('xiaoyi')
    xiaoer = Majordoma('xiaoer')
    xiaosan = GeneralManager('xiaosan')
    
    xiaoyi.SetSuperior(xiaoer)
    xiaoer.SetSuperior(xiaosan)
    #请求是一个元组,第一个元素是请求类型,第二个元素是请求值
    request = ('请假', 1)
    xiaoyi.RequestApplications(request)
    
    request = ('加薪', 500)
    xiaoyi.RequestApplications(request)
    
    request = ('升职', 1)
    xiaoyi.RequestApplications(request)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值