给出一个责任链模式的demo
时间: 2024-04-11 14:08:25 浏览: 8
好的,下面是一个简单的责任链模式的示例代码:
```python
from abc import ABC, abstractmethod
class Handler(ABC):
"""
定义处理请求的抽象处理器
"""
def __init__(self, successor=None):
self._successor = successor
@abstractmethod
def handle_request(self, request):
pass
class ConcreteHandler1(Handler):
"""
具体处理器1
"""
def handle_request(self, request):
if request == 'request1':
print('ConcreteHandler1 处理了请求:', request)
else:
if self._successor is not None:
self._successor.handle_request(request)
class ConcreteHandler2(Handler):
"""
具体处理器2
"""
def handle_request(self, request):
if request == 'request2':
print('ConcreteHandler2 处理了请求:', request)
else:
if self._successor is not None:
self._successor.handle_request(request)
if __name__ == '__main__':
"""
客户端代码
"""
handler1 = ConcreteHandler1()
handler2 = ConcreteHandler2(handler1)
handler2.handle_request('request1')
handler2.handle_request('request2')
handler2.handle_request('request3')
```
在这个示例中,定义了一个抽象处理器 `Handler`,包含一个处理请求的抽象方法 `handle_request()`,并且定义了一个具体处理器 `ConcreteHandler1` 和 `ConcreteHandler2`,它们分别实现了 `handle_request()` 方法来处理不同类型的请求。
在具体处理器中,如果能够处理该类型的请求,就直接处理;否则,就将请求传递给下一个处理器,直到找到能够处理该请求的处理器为止。
客户端代码中,首先创建了两个具体处理器 `handler1` 和 `handler2`,然后将 `handler1` 设置为 `handler2` 的后继处理器。最后,客户端代码调用 `handler2` 的 `handle_request()` 方法,传递不同类型的请求,观察哪个处理器能够处理该请求。