...

Python设计模式-15-责任链模式

责任链模式是一种行为型设计模式,它允许多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。责任链模式通常包括以下几个角色:

  • 抽象处理者(Handler):定义了一个接口,用于处理请求,并维护一个对下一个处理者的引用。

  • 具体处理者(Concrete Handler):实现了抽象处理者定义的接口,并具体地处理请求。如果它不能处理请求,则将请求转发给下一个处理者。

  • 客户端(Client):创建一个处理者链,并向链头的处理者发送请求。

下面是一个简单的 Python 示例,演示了如何使用责任链模式:

class Handler:
    def __init__(self, successor=None):
        self.successor = successor

    def handle_request(self, request):
        if self.successor is not None:
            return self.successor.handle_request(request)

class ConcreteHandlerA(Handler):
    def handle_request(self, request):
        if request == 'A':
            print('ConcreteHandlerA: Handling request.')
        else:
            super().handle_request(request)

class ConcreteHandlerB(Handler):
    def handle_request(self, request):
        if request == 'B':
            print('ConcreteHandlerB: Handling request.')
        else:
            super().handle_request(request)

class ConcreteHandlerC(Handler):
    def handle_request(self, request):
        if request == 'C':
            print('ConcreteHandlerC: Handling request.')
        else:
            super().handle_request(request)

handler_a = ConcreteHandlerA()
handler_b = ConcreteHandlerB(handler_a)
handler_c = ConcreteHandlerC(handler_b)

handler_c.handle_request('A')
handler_c.handle_request('B')
handler_c.handle_request('C')
handler_c.handle_request('D')

在上面的示例中,我们定义了一个抽象处理者 Handler,它定义了一个接口 handle_request(),用于处理请求,并维护一个对下一个处理者的引用。然后,我们定义了三个具体处理者 ConcreteHandlerA、ConcreteHandlerB 和 ConcreteHandlerC,它们实现了抽象处理者定义的接口,并具体地处理请求。如果它们不能处理请求,则将请求转发给下一个处理者。

在使用责任链模式时,我们可以通过创建一个处理者链并向链头的处理者发送请求来实现请求的处理。在上面的示例中,我们创建了一个处理者链 handler_c,并将它的下一个处理者设置为 handler_b,再将 handler_b 的下一个处理者设置为 handler_a。当客户端调用 handle_request() 方法时,处理者链会从链头开始依次处理请求,直到找到一个能够处理请求的处理者为止。需要注意的是,责任链模式可以帮助我们将请求的发送者和接收者之间的耦合关系解耦,从而提高代码的可维护性和可扩展性。

posted @ 2023-06-16 18:38  韩志超  阅读(127)  评论(0编辑  收藏  举报