Python設(shè)計(jì)模式之中介模式簡(jiǎn)單示例
本文實(shí)例講述了Python設(shè)計(jì)模式之中介模式。分享給大家供大家參考,具體如下:
Mediator Pattern:中介模式
中介模式提供了一系列統(tǒng)一的系統(tǒng)接口。此模式也被認(rèn)為是行為模式,因?yàn)樗?span style="color: #0000ff">能選擇程序處理流程。
當(dāng)許多類開(kāi)始在交互中產(chǎn)生結(jié)果時(shí),可以選用中介模式。當(dāng)軟件開(kāi)始組織的時(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è)試分類開(kāi)始執(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é)果:
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python設(shè)計(jì)模式之享元模式原理與用法實(shí)例分析
- Python設(shè)計(jì)模式之解釋器模式原理與用法實(shí)例分析
- Python設(shè)計(jì)模式之迭代器模式原理與用法實(shí)例分析
- Python設(shè)計(jì)模式之MVC模式簡(jiǎn)單示例
- Python設(shè)計(jì)模式之命令模式簡(jiǎn)單示例
- Python設(shè)計(jì)模式之觀察者模式簡(jiǎn)單示例
- Python設(shè)計(jì)模式之門(mén)面模式簡(jiǎn)單示例
- Python設(shè)計(jì)模式之代理模式簡(jiǎn)單示例
- Python設(shè)計(jì)模式之工廠模式簡(jiǎn)單示例
- Python設(shè)計(jì)模式之職責(zé)鏈模式原理與用法實(shí)例分析
相關(guān)文章
Python3.9環(huán)境搭建RobotFramework的詳細(xì)過(guò)程
Robot Framework是一個(gè)基于Python的,可擴(kuò)展的關(guān)鍵字驅(qū)動(dòng)的測(cè)試自動(dòng)化框架,用于端到端驗(yàn)收測(cè)試和驗(yàn)收測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(ATDD),這篇文章主要介紹了Python3.9環(huán)境搭建RobotFramework的詳細(xì)過(guò)程,需要的朋友可以參考下2023-01-01Python基于numpy模塊實(shí)現(xiàn)回歸預(yù)測(cè)
這篇文章主要介紹了Python基于numpy模塊實(shí)現(xiàn)回歸預(yù)測(cè),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05Flask表單與表單驗(yàn)證實(shí)現(xiàn)流程介紹
這篇文章主要介紹了python中Flask?Web?表單的使用方法介紹,表單的操作是Web程序開(kāi)發(fā)中最核心的模塊之一,絕大多數(shù)的動(dòng)態(tài)交互功能都是通過(guò)表單的形式實(shí)現(xiàn)的。更多介紹需要的小伙伴可以參考下面文章內(nèi)容2022-09-09Django自定義用戶表+自定義admin后臺(tái)中的字段實(shí)例
今天小編就為大家分享一篇Django自定義用戶表+自定義admin后臺(tái)中的字段實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11Django Sitemap 站點(diǎn)地圖的實(shí)現(xiàn)方法
這篇文章主要介紹了Django Sitemap 站點(diǎn)地圖的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04