# -*- 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)
设计模式之职责链模式
最新推荐文章于 2021-07-04 10:35:59 发布