python责任链模式
时间: 2023-11-13 20:55:41 浏览: 38
责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行发送,直到其中一个处理者对其进行处理。在 Python 中,可以使用类似于链表的方式来实现责任链模式。
具体来说,可以定义一个抽象处理者类,其中包含一个指向下一个处理者的引用。每个具体处理者类都实现了处理请求的方法,并在必要时将请求传递给下一个处理者。当请求到达最后一个处理者时,如果没有任何处理者能够处理该请求,则该请求将被忽略。
以下是一个简单的 Python 责任链模式示例:
```python
class Handler:
def __init__(self, successor=None):
self._successor = successor
def handle(self, request):
handled = self._handle(request)
if not handled:
self._successor.handle(request)
def _handle(self, request):
raise NotImplementedError('Must provide implementation in subclass.')
class ConcreteHandler1(Handler):
def _handle(self, request):
if 0 < request <= 10:
print(f'Request {request} handled in handler 1')
return True
class ConcreteHandler2(Handler):
def _handle(self, request):
if 10 < request <= 20:
print(f'Request {request} handled in handler 2')
return True
class ConcreteHandler3(Handler):
def _handle(self, request):
if 20 < request <= 30:
print(f'Request {request} handled in handler 3')
return True
if __name__ == '__main__':
h1 = ConcreteHandler1()
h2 = ConcreteHandler2(h1)
h3 = ConcreteHandler3(h2)
requests = [2, 5, 14, 22, 18, 3, 35, 27, 20]
for request in requests:
h3.handle(request)
```
在上面的示例中,我们定义了一个抽象处理者类 `Handler`,其中包含一个指向下一个处理者的引用 `_successor` 和一个处理请求的方法 `handle`。每个具体处理者类都实现了 `_handle` 方法来处理请求,并在必要时将请求传递给下一个处理者。
在 `main` 函数中,我们创建了三个具体处理者对象 `h1`、`h2` 和 `h3`,并将它们链接在一起。然后,我们创建了一些请求,并将它们依次传递给 `h3` 处理者。由于每个处理者只能处理特定范围内的请求,因此只有符合条件的请求才会被处理。