Design Patterns - Chain of Responsibility

Chain of Responsibility(职责链) — 对象行为型模式

使多个对象都有机会处理请求,从而避免其你去的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

适用场景

  1. 有多个对象可以处理一个请求,哪个对象处理该请求运行时自动确定。
  2. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
  3. 可处理一个请求的对象集合应被动态指定。

UML图

在这里插入图片描述

效果

  1. 降低耦合度:该模式使得一个对象无须知道是其他哪一个对象处理其请求。对象仅需要知道该请求会被“正确”地处理。接收者和发送者都没有对方的明确信息,且链中的对象不需要知道链的结构。

实现

#经理类
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 LineManager(Manager):
    def handleRequest(self,request):
        if request.requestType=='little' :
            print('requestType: %s ,requestContent: %s,' %(request.requestType,request.requestContent))
            print('小事一桩,我这个小小的line manager就能搞定')
        else:
            if self.successor !=None:
                print('requestType: %s ,requestContent: %s' %(request.requestType,request.requestContent))
                print('非小事,我这个小小的line manager无能为力,交上级处理')
                print('上级是:',self.successor)
                self.successor.handleRequest(request)
 
#部门经理
class DepartmentManager(Manager):
    def handleRequest(self,request):
        if request.requestType=='middle' :
            print('requestType: %s ,requestContent: %s ' %(request.requestType,request.requestContent))
            print('中级事件,我这个department manager就能搞定')
        else:
            if  self.successor !=None:               
                print('requestType: %s ,requestContent: %s' %(request.requestType,request.requestContent))
                print('非中级事件,我这个department manager无能为力,交上级处理' )
                print('上级是:',self.successor)
                self.successor.handleRequest(request)
 
    def __str__(self):
        return 'Department Manager '
 
#总经理
class GeneralManager(Manager):
    def handleRequest(self,request):
        if request.requestType=='big' :
            print('requestType: %s ,requestContent: %s' %(request.requestType,request.requestContent))
            print('大事件,得由我这个 general manager拍板')
 
    def __str__(self):
        return 'General Manager '
 
class Request():
    def __init__(self,requestType,requestContent):
        self.requestType=requestType
        self.requestContent=requestContent
 
    def commit(self,manager):
        ret=manager.handleRequest(self)
 
 


client

if __name__=='__main__':
    line_manager=LineManager('Line Manager')
    department_manager=DepartmentManager('Department Manager')
    general_manager=GeneralManager('General Manager')
    line_manager.setSuccessor(department_manager)
    department_manager.setSuccessor(general_manager)
 
    print('==========================================================')
    request=Request('little','请批准团队外出腐败经费1000元')
    request.commit(line_manager)
 
    print('==========================================================')
    request=Request('middle','请批准团队外出旅游10000元')
    request.commit(line_manager)
 
    print('==========================================================')
    request=Request('big','请批准团队设备购买100000元')
    request.commit(line_manager)

"""output
==========================================================
requestType: little ,requestContent: 请批准团队外出腐败经费1000元,
小事一桩,我这个小小的line manager就能搞定
==========================================================
requestType: middle ,requestContent: 请批准团队外出旅游10000元
非小事,我这个小小的line manager无能为力,交上级处理
上级是: Department Manager 
requestType: middle ,requestContent: 请批准团队外出旅游10000元 
中级事件,我这个department manager就能搞定
==========================================================
requestType: big ,requestContent: 请批准团队设备购买100000元
非小事,我这个小小的line manager无能为力,交上级处理
上级是: Department Manager 
requestType: big ,requestContent: 请批准团队设备购买100000元
非中级事件,我这个department manager无能为力,交上级处理
上级是: General Manager 
requestType: big ,requestContent: 请批准团队设备购买100000元
大事件,得由我这个 general manager拍板

Process finished with exit code 0

"""

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值