熱線電話:13121318867

登錄
首頁精彩閱讀Python設計模式之中介模式簡單示例
Python設計模式之中介模式簡單示例
2018-04-13
收藏

Python設計模式之中介模式簡單示例

本文實例講述了Python設計模式之中介模式。分享給大家供大家參考,具體如下:

Mediator Pattern:中介模式

中介模式提供了一系列統一的系統接口。此模式也被認為是行為模式,因為他能選擇程序處理流程。

當許多類開始在交互中產生結果時,可以選用中介模式。當軟件開始組織的時候,許多用戶的要求添加更多的功能。

這就導致了要和以前的類不斷交互,除了新類。隨著系統的復雜度加大,類之間的交互變得頻繁,維護代碼變得困難。

中介模式 就是為了解決這個問題,通過允許類之間的松耦合。這樣中介模式就能了解系統中所有類的功能。類的功能就是與中介類進行交互。當類與類之間需要交互的時候,類就發送信息給中介,中介就轉發信息給被請求的類。通過這樣,類與類之間的復雜度就減少了。

一個簡單的中介模式例子:

一個類型的中介模式例子可以在測試自動框架(包含4個類,TC,TestManager,Reporter ,DB)中被證明。

1.TC類是測試的響應,借助方法setup(),execute(),tearDown()。
2.Reporter類調用

當測試分類開始執行時,調用prepare方法。
當測試分類完成執行時,調用report()方法 ,
框架的測試響應就是好的幫助文檔。

我也沒弄懂中介模式,讓人犯暈!

代碼貼出來:

import time
class TC:
  def __init__(self):
    self._tm = tm
    self._bProblem = 0
  def setup(self):
    print "Setting up the Test"
    time.sleep(1)
    self._tm.prepareReporting()
  def execute(self):
    if not self._bProblem:
      print "Executing the test"
      time.sleep(1)
    else:
      print "Problem in setup,Test not executed."
  def tearDown(self):
    if not self._bProblem:
      print "Tearing down"
      time.sleep(1)
      self._tm.publishReport()
    else:
      print "Test not executed.No tear down required."
  def setTM(self, TM):
    self._tm = tm
  def setProblem(self, value):
    self._bProblem = value
class Reporter:
  def __init__(self):
    self._tm = None
  def prepare(self):
    print "Reporter Class is preparing to report the results"
    time.sleep(1)
  def report(self):
    print "Reporting the results of Test"
    time.sleep(1)
  def setTM(self, TM):
    self._tm = tm
class DB:
  def __init__(self):
    self._tm = None
  def insert(self):
    print "Inserting the execution begin status in the Database"
    time.sleep(1)
    import random
    if random.randrange(1,4) == 3:
      return -1
  def update(self):
    print "Updating the test results in Database"
    time.sleep(1)
  def setTM(self, TM):
    self._tm = tm
class TestManager:
  def __init__(self):
    self._reporter = None
    self._db = None
    self._tc = None
  def prepareReporting(self):
    rvalue = self._db.insert()
    if rvalue == -1:
      self._tc.setProblem(1)
      self._reporter.prepare()
  def setReporter(self, reporter):
    self._reporter = reporter
  def setDB(self, db):
    self._db = db
  def publishReport(self):
    self._db.update()
    rvalue = self._reporter.report()
  def setTC(self, tc):
    self._tc = tc
if __name__ == '__main__':
  reporter = Reporter()
  db = DB()
  tm = TestManager()
  tm.setReporter(reporter)
  tm.setDB(db)
  reporter.setTM(tm)
  db.setTM(tm)
  while(1):
    tc = TC()
    tc.setTM(tm)
    tm.setTC(tc)
    tc.setup()
    tc.execute()
    tc.tearDown()


運行結果:



數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢