📅  最后修改于: 2023-12-03 14:57:46.837000             🧑  作者: Mango
责任链设计模式
是一种行为型设计模式,其主要目的是将请求的发送者和接收者解耦,从而使多个对象都有机会处理请求。将这些对象链接在一起并沿着链传递请求,直到有一个对象处理为止。
在以下场景中,可以使用责任链设计模式:
责任链设计模式主要包含以下角色:
class Handler:
def __init__(self):
self._next_handler = None
def set_next(self, handler):
self._next_handler = handler
return handler
def handle(self, request):
if not self._handle(request):
self._next_handler.handle(request)
def _handle(self, request):
raise NotImplementedError('必须实现_handle方法')
class ConcreteHandler1(Handler):
def _handle(self, request):
if 0 < request <= 10:
print(f'请求 {request} 被处理 by ConcreteHandler1')
return True
class ConcreteHandler2(Handler):
def _handle(self, request):
if 10 < request <= 20:
print(f'请求 {request} 被处理 by ConcreteHandler2')
return True
class ConcreteHandler3(Handler):
def _handle(self, request):
if 20 < request <= 30:
print(f'请求 {request} 被处理 by ConcreteHandler3')
return True
class DefaultHandler(Handler):
def _handle(self, request):
print(f'未能处理请求 {request}')
class Client:
def __init__(self):
self.handler = ConcreteHandler1().set_next(
ConcreteHandler2().set_next(
ConcreteHandler3().set_next(
DefaultHandler()
)
)
)
def delegate(self, requests:list):
for request in requests:
self.handler.handle(request)
# 示例
client = Client()
client.delegate([1, 5, 15, 25, 40])
"""
输出:
请求 1 被处理 by ConcreteHandler1
请求 5 被处理 by ConcreteHandler1
请求 15 被处理 by ConcreteHandler2
请求 25 被处理 by ConcreteHandler3
未能处理请求 40
"""
责任链设计模式能够将请求的发送者和接收者解耦,使多个对象都有机会处理请求。在实际场景中,可以通过责任链模式,创建一个可配置的请求处理流程,从而灵活地对应用程序的需求进行处理。