📜  责任链Python设计模式(1)

📅  最后修改于: 2023-12-03 14:57:46.827000             🧑  作者: Mango

责任链 Python 设计模式

责任链是一种行为型设计模式,它允许多个对象在一个请求链上依次处理请求,直到其中一个对象能够处理该请求或者请求到达链的末尾而无法处理。

在这种模式中,每个对象都拥有一个指向它的下一个对象的引用,因此请求会沿着链依次传递。当一个对象不能处理请求时,它会把请求传递给下一个对象,直到请求被成功处理为止。

优点
  • 解耦:将发送方和接收方分离,只需要知道第一个对象即可发送请求,而不用知道请求的接收方是谁。
  • 灵活:可以随时在责任链中添加或删除对象,非常灵活。
  • 高耦合:将一些操作滞留在链中会导致性能问题。
代码示例
class Handler:
    def __init__(self):
        self.successor = None

    def handle(self, request):
        self.successor.handle(request)

class ConcreteHandlerA(Handler):
    def handle(self, request):
        if request == "A":
            print("Request A handled")
        else:
            super().handle(request)

class ConcreteHandlerB(Handler):
    def handle(self, request):
        if request == "B":
            print("Request B handled")
        else:
            super().handle(request)

class ConcreteHandlerC(Handler):
    def handle(self, request):
        if request == "C":
            print("Request C handled")
        else:
            super().handle(request)

if __name__ == "__main__":
    handler1 = ConcreteHandlerA()
    handler2 = ConcreteHandlerB()
    handler3 = ConcreteHandlerC()

    handler1.successor = handler2
    handler2.successor = handler3

    handler1.handle("A")
    handler1.handle("B")
    handler1.handle("C")
    handler1.handle("D")

在这个例子中,我们定义了一个抽象基类 Handler,以及三个具体实现类 ConcreteHandlerAConcreteHandlerBConcreteHandlerC

每个处理程序都有一个指向下一个处理程序的引用,因此请求会沿着链传递,直到到达能够处理请求的处理程序为止。