33 lines
1.3 KiB
Python
33 lines
1.3 KiB
Python
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))
|