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.