""" All Concrete Handlers either handle a request or pass it to the next handler in the chain. """ from typing import Optional, Any from behavioral.chain_responsibility.abstract_handler import AbstractHandler class MonkeyHandler(AbstractHandler): def handle(self, request: Any) -> Optional[str]: if request == 'Banana': return f"Monkey: I'll eat the {request}" return super().handle(request) class SquirrelHandler(AbstractHandler): def handle(self, request: Any) -> Optional[str]: if request == 'Nut': return f"Squirrel: I'll eat the {request}" return super().handle(request) class DogHandler(AbstractHandler): def handle(self, request: Any) -> Optional[str]: if request == 'MeatBall': return f"Dog: I'll eat the {request}" return super().handle(request)