from abc import ABC, abstractmethod class Handler(ABC): def __init__(self, successor=None): self.successor = successor # Следующий обработчик в цепи @abstractmethod def handle_request(self, request): pass class ConcreteHandlerA(Handler): def handle_request(self, request): if request == "A": return f"Handler A handled the request: {request}" elif self.successor: return self.successor.handle_request(request) return "Request not handled" class ConcreteHandlerB(Handler): def handle_request(self, request): if request == "B": return f"Handler B handled the request: {request}" elif self.successor: return self.successor.handle_request(request) return "Request not handled" class ConcreteHandlerC(Handler): def handle_request(self, request): if request == "C": return f"Handler C handled the request: {request}" elif self.successor: return self.successor.handle_request(request) return "Request not handled" handler_chain = ConcreteHandlerA(ConcreteHandlerB(ConcreteHandlerC())) # Цепочка обработчиков requests = ["A", "B", "C", "D"] # Примеры запросов for req in requests: print(handler_chain.handle_request(req))