本文主要是介绍行为型设计模式-责任链(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)
总结
责任链模式通过将请求的发送者和接收者解耦,允许动态地构建处理者链,使得请求可以在多个对象之间传递,直到被处理。这种方式特别适用于那些需要多个对象共同处理一个请求的场景,比如异常处理、工作流处理等。
这篇关于行为型设计模式-责任链(chain of responsibility)模式-python实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!