Chuỗi trách nhiệm

Mẫu chuỗi trách nhiệm được sử dụng để đạt được sự liên kết lỏng lẻo trong phần mềm nơi một yêu cầu cụ thể từ khách hàng được chuyển qua một chuỗi các đối tượng có trong nó. Nó giúp xây dựng một chuỗi các đối tượng. Yêu cầu đi vào từ một đầu và chuyển từ đối tượng này sang đối tượng khác.

Mẫu này cho phép một đối tượng gửi một lệnh mà không cần biết đối tượng nào sẽ xử lý yêu cầu.

Làm thế nào để thực hiện mô hình chuỗi trách nhiệm?

Bây giờ chúng ta sẽ xem cách thực hiện mô hình chuỗi trách nhiệm.

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)

Đầu ra

Chương trình trên tạo ra kết quả sau:

Giải trình

Đoạn mã trên tạo một báo cáo cho các nhiệm vụ hàng tháng, nơi nó gửi các lệnh qua từng chức năng. Cần hai trình xử lý - cho PDF và cho văn bản. Nó in kết quả đầu ra khi đối tượng được yêu cầu thực thi từng chức năng.