责任链模式用于实现软件中的松散耦合,其中来自客户端的指定请求通过包含在其中的对象链传递。 它有助于构建一系列对象。 请求从一端进入并从一个对象移动到另一个对象。
该模式允许对象发送命令而不知道哪个对象将处理该请求。
现在我们将看到如何实施责任链模式。参考以下实现代码 -
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)
执行上述程序生成以下输出 -
解释说明
上面的代码是创建一个报告的月任务,通过每个函数发送命令。 它需要两个处理程序 - 用于pdf和文本。 当所需的对象执行每个功能,它将打印输出。