python 责任链
时间: 2023-10-28 21:00:10 浏览: 42
Python中的责任链(Chain of Responsibility)是一种行为设计模式,它将请求发送者和接收者解耦,使多个对象都有机会处理请求。每个接收者都包含对下一个接收者的引用,如果某个接收者无法处理请求,它会将请求转发给下一个接收者,直到请求被处理或者所有接收者都无法处理。
在Python中实现责任链模式通常需要定义一个抽象处理者(Handler)类,其中包含处理请求的方法和下一个处理者的引用。具体的处理者类继承自抽象处理者类,并实现自己的处理逻辑。
下面是一个简单的Python责任链模式示例:
```python
class Handler:
"""
抽象处理者类
"""
def __init__(self, successor=None):
self.successor = successor
def handle_request(self, request):
pass
class ConcreteHandler1(Handler):
"""
具体处理者类1
"""
def handle_request(self, request):
if request == 'request1':
print("ConcreteHandler1 处理请求")
elif self.successor is not None:
self.successor.handle_request(request)
class ConcreteHandler2(Handler):
"""
具体处理者类2
"""
def handle_request(self, request):
if request == 'request2':
print("ConcreteHandler2 处理请求")
elif self.successor is not None:
self.successor.handle_request(request)
# 创建责任链
handler1 = ConcreteHandler1()
handler2 = ConcreteHandler2(handler1)
# 发送请求
handler2.handle_request('request1') # 输出:ConcreteHandler1 处理请求
handler2.handle_request('request2') # 输出:ConcreteHandler2 处理请求
handler2.handle_request('request3') # 输出:无处理者能处理该请求
```
在上述示例中,`Handler` 是抽象处理者类,定义了处理请求的方法和下一个处理者的引用。`ConcreteHandler1` 和 `ConcreteHandler2` 是具体的处理者类,继承自抽象处理者类,并实现自己的处理逻辑。
通过创建责任链,将具体处理者按顺序连接起来。然后,通过调用责任链的 `handle_request` 方法,将请求依次传递给处理者进行处理。如果某个处理者能够处理请求,就进行处理;如果不能处理,则转发给下一个处理者。如果所有的处理者都无法处理请求,则认为请求无法被处理。