欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 行为型设计模式-责任链(chain of responsibility)模式-python实现

行为型设计模式-责任链(chain of responsibility)模式-python实现

2024/10/25 12:58:39 来源:https://blog.csdn.net/linkedin_21843693/article/details/141459502  浏览:    关键词:行为型设计模式-责任链(chain of responsibility)模式-python实现

设计模式汇总:查看

通俗示例

想象一下你在一个客服中心工作,当一个客户的问题提交给客服中心时,这个问题可能会被第一个可用的客服人员处理。如果这位客服人员无法解决问题,那么问题会被转发给更高级别的客服。这个过程可能会一直持续到问题被解决或者达到最高级别的支持。这种处理问题的方式就是一个责任链的例子。

通俗解释

责任链模式是一种行为型设计模式,它允许将请求沿着处理者链进行传递,直到有一个处理者能够处理它为止。在责任链模式中,多个对象都有机会处理请求,将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它或者请求到达链的末端。

责任链模式的组成包括:

  • 处理者(Handler):定义处理请求的接口,通常还包含一个指向下一个处理者的引用。
  • 具体处理者(Concrete Handler):处理它所负责的请求,如果无法处理,则将请求传递给链中的下一个处理者。

责任链模式的优点

  • 降低耦合度:请求的发送者和接收者之间无需知道对方的详细信息。
  • 增加灵活性:可以动态地添加或者删除处理者,无需修改现有代码。
  • 增强可扩展性:可以很容易地扩展新的处理者类。

Python代码示例

以下是一个责任链模式的简单实现:

class Manager:"""经理类"""successor = Nonename = ''def __init__(self, name):self.name = namedef setSuccessor(self, successor):# 设置上级self.successor = successordef handleRequest(self, request):# 处理请求passclass LineManager(Manager):"""直属经理"""def handleRequest(self, request):if request.requestType == 'DaysOff' and request.number <= 3:return '%s:%s Num:%d Accepted OVER' % (self.name, request.requestContent, request.number)else:print('%s:%s Num:%d Accepted CONTINUE' % (self.name, request.requestContent, request.number))if self.successor is not None:return self.successor.handleRequest(request)class DepartmentManager(Manager):"""部门经理"""def handleRequest(self, request):if request.requestType == 'DaysOff' and request.number <= 7:return '%s:%s Num:%d Accepted OVER' % (self.name, request.requestContent, request.number)else:print('%s:%s Num:%d Accepted CONTINUE' % (self.name, request.requestContent, request.number))if self.successor is not None:return self.successor.handleRequest(request)class GeneralManager(Manager):"""总经理"""def handleRequest(self, request):if request.requestType == 'DaysOff':return '%s:%s Num:%d Accepted OVER' % (self.name, request.requestContent, request.number)class Request:"""请求类,用于封装请求信息和处理请求。Attributes:requestType: 请求的类型。requestContent: 请求的内容。number: 请求的编号,默认为0。"""def __init__(self, requestType, requestContent, number=0):"""初始化请求对象。Args:requestType: 请求的类型。requestContent: 请求的内容。number: 请求的编号,默认为0。"""self.requestType = requestTypeself.requestContent = requestContentself.number = numberdef commit(self, generalManager):"""提交请求,由请求者调用,将请求交给管理者处理。Args:generalManager: 管理者对象,用于处理请求。Returns:处理请求后的返回值。"""ret = generalManager.handleRequest(self)print(ret)return ret# 当模块作为主程序运行时,以下代码块将被执行
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)# 创建请假申请实例并提交给一线经理审批# 申请一天假期request = Request(requestContent="'Ask 1 day off'", requestType='DaysOff', number=1)request.commit(line_manager)# 创建请假申请实例并提交给一线经理审批# 申请五天假期request = Request(requestContent="'Ask 5 day off'", requestType='DaysOff', number=5)request.commit(line_manager)# 创建请假申请实例并提交给一线经理审批# 申请十天假期request = Request(requestContent="'Ask 10 day off'", requestType='DaysOff', number=10)request.commit(line_manager)

总结

责任链模式通过将请求的发送者和接收者解耦,允许动态地构建处理者链,使得请求可以在多个对象之间传递,直到被处理。这种方式特别适用于那些需要多个对象共同处理一个请求的场景,比如异常处理、工作流处理等。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com