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.