职责链模式(python)

职责链模式将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系


#encoding=utf-8
#
#by panda
#职责连模式

def printInfo(info):
    print unicode(info, 'utf-8').encode('gbk')

#抽象职责类
class Manager():
    successor = None
    name = ''
    def __init__(self, name):
        self.name = name
    
    def SetSuccessor(self, successor):
        self.successor = successor
    
    def HandleRequest(self, request):
        pass

#具体职责类:经理
class CommonManager(Manager):
    def HandleRequest(self, request):
        if request.RequestType == '请假' and request.Number <= 2:
            printInfo('%s:%s 数量%d 被批准' % (self.name, request.RequestContent, request.Number))
        else:
            if self.successor != None:
                self.successor.HandleRequest(request)
                
#具体职责类:总监
class Majordomo(Manager):
    def HandleRequest(self, request):
        if request.RequestType == '请假' and request.Number <= 5:
            printInfo('%s:%s 数量%d 被批准' % (self.name, request.RequestContent, request.Number))
        else:
            if self.successor != None:
                self.successor.HandleRequest(request)

#具体职责类:总经理
class GeneralManager(Manager):
    def HandleRequest(self, request):
        if request.RequestType == '请假':
            printInfo('%s:%s 数量%d 被批准' % (self.name, request.RequestContent, request.Number))
        elif request.RequestType == '加薪' and request.Number <= 500:
            printInfo('%s:%s 数量%d 被批准' % (self.name, request.RequestContent, request.Number))
        elif request.RequestType == '加薪' and request.Number > 500:
            printInfo('%s:%s 数量%d 再说吧' % (self.name, request.RequestContent, request.Number))

class Request():
    RequestType = ''
    RequestContent = ''
    Number = 0

def clientUI():
    jinLi = CommonManager('金力')
    zongJian = Majordomo('宗健')
    zhongJingLi = GeneralManager('钟金利')
    
    jinLi.SetSuccessor(zongJian)
    zongJian.SetSuccessor(zhongJingLi)
    
    request = Request()
    request.RequestType = '请假'
    request.RequestContent = '小菜请假'
    request.Number = 1
    jinLi.HandleRequest(request)
    
    request.RequestType = '请假'
    request.RequestContent = '小菜请假'
    request.Number = 5
    jinLi.HandleRequest(request)
    
    request.RequestType = '加薪'
    request.RequestContent = '小菜要求加薪'
    request.Number = 500
    jinLi.HandleRequest(request)
    
    request.RequestType = '加薪'
    request.RequestContent = '小菜要求加薪'
    request.Number = 1000
    jinLi.HandleRequest(request)
    return

if __name__ == '__main__':
    clientUI();

类图




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值