在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 責(zé)任鏈設(shè)計(jì)模式
反模式
隊(duì)列
適配器設(shè)計(jì)模式
享元設(shè)計(jì)模式
Python設(shè)計(jì)模式
工廠模式
模板設(shè)計(jì)模式
構(gòu)建器(Builder)設(shè)計(jì)模式
Python設(shè)計(jì)模式概要
命令設(shè)計(jì)模式
Python設(shè)計(jì)模式簡介
觀察者設(shè)計(jì)模式
代理設(shè)計(jì)模式
異常處理
責(zé)任鏈設(shè)計(jì)模式
字典實(shí)現(xiàn)
抽象工廠設(shè)計(jì)模式
Python并發(fā)(多線程)
策略設(shè)計(jì)模式
門面(Facade)設(shè)計(jì)模式
原型設(shè)計(jì)模式
迭代器設(shè)計(jì)模式
集合
單例模式
列表數(shù)據(jù)結(jié)構(gòu)
狀態(tài)設(shè)計(jì)模式
模型視圖控制器(MVC)模式
裝飾器設(shè)計(jì)模式
面向?qū)ο蟾拍畹膶?shí)現(xiàn)
面向?qū)ο笤O(shè)計(jì)模式
字符串和序列化

責(zé)任鏈設(shè)計(jì)模式

責(zé)任鏈模式用于實(shí)現(xiàn)軟件中的松散耦合,其中來自客戶端的指定請(qǐng)求通過包含在其中的對(duì)象鏈傳遞。 它有助于構(gòu)建一系列對(duì)象。 請(qǐng)求從一端進(jìn)入并從一個(gè)對(duì)象移動(dòng)到另一個(gè)對(duì)象。

該模式允許對(duì)象發(fā)送命令而不知道哪個(gè)對(duì)象將處理該請(qǐng)求。

如何實(shí)現(xiàn)責(zé)任鏈模式?

現(xiàn)在我們將看到如何實(shí)施責(zé)任鏈模式。參考以下實(shí)現(xiàn)代碼 -

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)

執(zhí)行上述程序生成以下輸出 -

解釋說明

上面的代碼是創(chuàng)建一個(gè)報(bào)告的月任務(wù),通過每個(gè)函數(shù)發(fā)送命令。 它需要兩個(gè)處理程序 - 用于PDF和文本。 當(dāng)所需的對(duì)象執(zhí)行每個(gè)功能,它將打印輸出。