溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python設(shè)計(jì)模式之中介模式簡(jiǎn)單示例

發(fā)布時(shí)間:2020-10-21 19:49:46 來(lái)源:腳本之家 閱讀:160 作者:李自泰 欄目:開發(fā)技術(shù)

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

Mediator Pattern:中介模式

中介模式提供了一系列統(tǒng)一的系統(tǒng)接口。此模式也被認(rèn)為是行為模式,因?yàn)樗?span >能選擇程序處理流程。

當(dāng)許多類開始在交互中產(chǎn)生結(jié)果時(shí),可以選用中介模式。當(dāng)軟件開始組織的時(shí)候,許多用戶的要求添加更多的功能。

這就導(dǎo)致了要和以前的類不斷交互,除了新類。隨著系統(tǒng)的復(fù)雜度加大,類之間的交互變得頻繁,維護(hù)代碼變得困難。

中介模式 就是為了解決這個(gè)問(wèn)題,通過(guò)允許類之間的松耦合。這樣中介模式就能了解系統(tǒng)中所有類的功能。類的功能就是與中介類進(jìn)行交互。當(dāng)類與類之間需要交互的時(shí)候,類就發(fā)送信息給中介,中介就轉(zhuǎn)發(fā)信息給被請(qǐng)求的類。通過(guò)這樣,類與類之間的復(fù)雜度就減少了。

一個(gè)簡(jiǎn)單的中介模式例子:

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

1.TC類是測(cè)試的響應(yīng),借助方法setup(),execute(),tearDown()。
2.Reporter類調(diào)用

當(dāng)測(cè)試分類開始執(zhí)行時(shí),調(diào)用prepare方法。
當(dāng)測(cè)試分類完成執(zhí)行時(shí),調(diào)用report()方法 ,
框架的測(cè)試響應(yīng)就是好的幫助文檔。

我也沒(méi)弄懂中介模式,讓人犯暈!

代碼貼出來(lái):

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()

運(yùn)行結(jié)果:

Python設(shè)計(jì)模式之中介模式簡(jiǎn)單示例

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI