Skip to content

Instantly share code, notes, and snippets.

@farhadmpr
Created December 25, 2019 07:42
Show Gist options
  • Save farhadmpr/fc7305d9997657f7168ac3b32c289046 to your computer and use it in GitHub Desktop.
Save farhadmpr/fc7305d9997657f7168ac3b32c289046 to your computer and use it in GitHub Desktop.
Chain of responsibility design pattern in python
class ReportFormat(object):
PDF = 0
TEXT = 1
class Report(object):
def __init__(self, format_):
self.title = 'title'
self.format_ = format_
class Handler(object):
def __init__(self):
self.nextHandler = None
def handle(self, req):
self.nextHandler.handle(req)
class PdfHandler(Handler):
def handle(self, req):
if req.format_ == ReportFormat.PDF:
print(f'pdf handler: {req.title}')
else:
super().handle(req)
class TextHandler(Handler):
def handle(self, req):
if req.format_ == ReportFormat.TEXT:
print(f'text handler: {req.title}')
else:
super().handle(req)
class ErrorHandler(Handler):
def handle(self, req):
print("Invalid request")
if __name__ == '__main__':
report = Report(ReportFormat.TEXT)
pdf_handler = PdfHandler()
text_handler = TextHandler()
pdf_handler.nextHandler = text_handler
text_handler.nextHandler = ErrorHandler()
pdf_handler.handle(report)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment