Python 设计模式之责任链模式
责任链模式是一种行为型设计模式,它允许将请求沿着处理链传递,直到有一个处理者能够处理请求为止。这种模式将请求的发送者和接收者解耦,从而使多个对象都有机会处理请求。在责任链模式中,每个处理者都有一个对下一个处理者的引用,形成一个处理链。
以下是责任链模式的实现步骤:
创建一个抽象处理者类(Handler),定义一个抽象方法来处理请求,同时持有对下一个处理者的引用。
创建具体处理者类(ConcreteHandler),实现抽象方法来处理请求,如果自己无法处理请求,则将请求转发给下一个处理者。
客户端创建一个请求,并将请求发送给第一个处理者。如果第一个处理者无法处理请求,则将请求传递给下一个处理者,直到有一个处理者处理请求为止。
下面是使用Python实现责任链模式的示例代码,使用字符串“pidancode.com”、“皮蛋编程”作为范例:
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) return None class ConcreteHandlerA(Handler): def handle_request(self, request): if 'pidancode.com' in request: return 'Handled by ConcreteHandlerA' else: return super().handle_request(request) class ConcreteHandlerB(Handler): def handle_request(self, request): if '皮蛋编程' in request: return 'Handled by ConcreteHandlerB' else: return super().handle_request(request) if __name__ == '__main__': handler_a = ConcreteHandlerA() handler_b = ConcreteHandlerB(handler_a) request1 = 'www.pidancode.com' result1 = handler_b.handle_request(request1) print(result1) request2 = '欢迎访问皮蛋编程' result2 = handler_b.handle_request(request2) print(result2) request3 = 'www.google.com' result3 = handler_b.handle_request(request3) print(result3)
在这个例子中,Handler是抽象处理者类,ConcreteHandlerA和ConcreteHandlerB是具体处理者类。客户端创建了一个请求,将请求传递给ConcreteHandlerB。如果ConcreteHandlerB无法处理请求,就将请求传递给下一个处理者ConcreteHandlerA。如果ConcreteHandlerA也无法处理请求,就返回None。
在这个示例中,如果请求包含“pidancode.com”,则ConcreteHandlerA将处理请求,并返回“Handled by ConcreteHandlerA”;如果请求包含“皮蛋编程”,则ConcreteHandlerB将处理请求,并返回“Handled by ConcreteHandlerB”;如果请求既不包含“pidancode.com”也不包含“皮蛋编程”,则处理者将继续传递请求,直到有一个处理者能够处理请求为止。
相关文章