当前位置:编程学习 > 网站相关 >>

职责链模式(python)

 

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

 

 

view plain

#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(); 

 

类图:

 

\

 

摘自 ponder008的专栏

补充:Web开发 , Python ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,