Design: Chain of Responsibility Pattern Implementation
Design focuses on the pattern implementation and request flow. Out of scope are UI details, persistence, and distributed system concerns.
Functional Requirements
Non-Functional Requirements
Jump into concepts and practice - no test required
Client | v [Chain Manager] --> [Handler 1] --> [Handler 2] --> [Handler 3] --> ... --> [Handler N] Each handler decides to process or pass the request to the next handler.
Chain of Responsibility pattern in system design?class Handler:
def __init__(self, successor=None):
self.successor = successor
def handle(self, request):
if self.can_handle(request):
return f"Handled {request}"
elif self.successor:
return self.successor.handle(request)
else:
return "Not handled"
def can_handle(self, request):
return False
class ConcreteHandlerA(Handler):
def can_handle(self, request):
return request == 'A'
class ConcreteHandlerB(Handler):
def can_handle(self, request):
return request == 'B'
chain = ConcreteHandlerA(ConcreteHandlerB())
print(chain.handle('B'))class Handler:
def __init__(self, successor=None):
self.successor = successor
def handle(self, request):
if self.can_handle(request):
return f"Handled {request}"
else:
return "Not handled"
def can_handle(self, request):
return False
class ConcreteHandler(Handler):
def can_handle(self, request):
return request == 'X'
chain = ConcreteHandler()
print(chain.handle('Y'))