Sorumluluk Zinciri

Sorumluluk zinciri modeli, müşteriden gelen belirli bir talebin içerdiği nesneler zincirinden geçirildiği yazılımda gevşek bağlantı sağlamak için kullanılır. Bir nesne zinciri oluşturmaya yardımcı olur. İstek bir uçtan girer ve bir nesneden diğerine geçer.

Bu kalıp, bir nesnenin, hangi nesnenin isteği yerine getireceğini bilmeden bir komut göndermesine izin verir.

Sorumluluk zinciri modeli nasıl uygulanır?

Şimdi sorumluluk zinciri modelinin nasıl uygulanacağını göreceğiz.

class ReportFormat(object):
   PDF = 0
   TEXT = 1
class Report(object):
   def __init__(self, format_):
      self.title = 'Monthly report'
      self.text = ['Things are going', 'really, really well.']
      self.format_ = format_

class Handler(object):
   def __init__(self):
      self.nextHandler = None

   def handle(self, request):
      self.nextHandler.handle(request)

class PDFHandler(Handler):

   def handle(self, request):
      if request.format_ == ReportFormat.PDF:
         self.output_report(request.title, request.text)
      else:
         super(PDFHandler, self).handle(request)
	
   def output_report(self, title, text):
      print '<html>'
      print ' <head>'
      print ' <title>%s</title>' % title
      print ' </head>'
      print ' <body>'
      for line in text:
         print ' <p>%s

' % line print ' </body>' print '</html>' class TextHandler(Handler): def handle(self, request): if request.format_ == ReportFormat.TEXT: self.output_report(request.title, request.text) else: super(TextHandler, self).handle(request) def output_report(self, title, text): print 5*'*' + title + 5*'*' for line in text: print line class ErrorHandler(Handler): def handle(self, request): 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)

Çıktı

Yukarıdaki program aşağıdaki çıktıyı üretir -

Açıklama

Yukarıdaki kod, her işlev üzerinden komutlar gönderdiği aylık görevler için bir rapor oluşturur. İki işleyici gerektirir - PDF ve metin için. Gerekli nesne her işlevi çalıştırdığında çıktıyı yazdırır.