开发手册 欢迎您!
软件开发者资料库

Python设计模式 - 责任链

Python设计模式责任链 - 从简单和简单的步骤学习Python设计模式从基本到高级概念,包括简介,Python的Gist,模型视图控制器,单例,工厂,构建器,原型,外观,命令,适配器,装饰器代理,责任链,观察员,状态,战略,模板,飞重,抽象工厂,面向对象的模式,面向对象的概念实施,迭代器模式,词典,列表数据结构,集,队列,字符串和序列化,Python中的并发,反模式,异常处理。

责任链模式用于在软件中实现松散耦合,其中来自客户端的指定请求通过其中包含的对象链传递.它有助于构建一系列对象.请求从一端进入并从一个对象移动到另一个对象.

此模式允许对象发送命令而不知道哪个对象将处理请求.

如何实施责任链模式?

我们现在将看到如何实施责任链模式.

class ReportFormat(object):   PDF = 0   TEXT = 1class 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 ''      print ' '      print ' %s' % title      print ' '      print ' '      for line in text:         print ' 

%s' % line      print ' '      print ''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 lineclass 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和文本.一旦所需对象执行每个函数,它就会打印输出.