Python設(shè)計(jì)模式之門面模式簡(jiǎn)單示例
本文實(shí)例講述了Python設(shè)計(jì)模式之門面模式。分享給大家供大家參考,具體如下:
facade:建筑物的表面
門面模式是一個(gè)軟件工程設(shè)計(jì)模式,主要用于面向?qū)ο缶幊獭?一個(gè)門面可以看作是為大段代碼提供簡(jiǎn)單接口的對(duì)象,就像類庫(kù)。
門面模式被歸入建筑設(shè)計(jì)模式。門面模式隱藏系統(tǒng)內(nèi)部的細(xì)節(jié)和復(fù)雜度,給用戶提供一個(gè)簡(jiǎn)單的接口,采用門面模式,用戶能夠使用簡(jiǎn)單的接口進(jìn)行工作,而不用擔(dān)心系統(tǒng)的復(fù)雜。
理解門面模式最重要的一點(diǎn)就是它提供的簡(jiǎn)單接口是系統(tǒng)的一部分。因此提供簡(jiǎn)單易用的功能要?jiǎng)龠^(guò)完整的功能。
門面模式的優(yōu)點(diǎn)是向用戶提供的基礎(chǔ)類的操作,在當(dāng)前門面模式的實(shí)現(xiàn)下,是不會(huì)向用戶提供可控的,定制化的接口。
基于以上原因,門面模式不是對(duì)子系統(tǒng)的封裝,而是對(duì)可選的功能提供簡(jiǎn)單的接口
下面是用塊圖,對(duì)門面模式的解釋:
1.在塊圖表中,我們有將計(jì)算機(jī)分成三種類來(lái)表示:CPU,Memory,HardDrive。
cpu類有一個(gè)方法是jump()和execute(),Memory類有方法,load(),HardDrive類有一個(gè)read()方法
2.我們有個(gè)一個(gè)門面類,Computer Class ,提供start()方法給用戶。
3.當(dāng)用戶想要開(kāi)啟電腦系統(tǒng)的時(shí)候,它調(diào)用Computer類的start()方法.
一個(gè)簡(jiǎn)單的python例子:
讓我們來(lái)考慮一個(gè)測(cè)試自動(dòng)化的框架,測(cè)試需要運(yùn)行在特定構(gòu)建類上,比如'TC1,TC2…TCn',每一個(gè)類都包涵一個(gè)方法'run()'來(lái)執(zhí)行測(cè)試。
我們提供了一個(gè)門面-TestRunner-在測(cè)試類之上,作為執(zhí)行測(cè)試的簡(jiǎn)單接口。以這種方式,客戶不在需要擔(dān)心有多少測(cè)試在執(zhí)行,怎么樣執(zhí)行他。
TestRunner類有一個(gè)方法名runAll,是執(zhí)行已經(jīng)注冊(cè)的所有測(cè)試。
當(dāng)用戶的自動(dòng)框架為執(zhí)行測(cè)試去構(gòu)建,作為客戶,他需要?jiǎng)?chuàng)建一個(gè)TestRunner類,調(diào)用runall方法,runall方法會(huì)返回創(chuàng)建的測(cè)試對(duì)象,
并調(diào)用他們的run 方法,這樣執(zhí)行了所有測(cè)試。
以下是代碼:
import time class TC1: def run(self): print "####In Test 1####" time.sleep(1) print "Setting up" time.sleep(1) print "Running test" time.sleep(1) print "Tearing down" time.sleep(1) print "Test Finished\n" class TC2: def run(self): print "#####In Test 2 ######" time.sleep(1) print "Setting up" time.sleep(1) print "Running test" time.sleep(1) print "Tearing down" time.sleep(1) print "Test Finished\n" class TC3: def run(self): print "#####In Test 3 ######" time.sleep(1) print "Setting up" time.sleep(1) print "Running test" time.sleep(1) print "Tearing down" time.sleep(1) print "Test Finished\n" #Facade class TestRunner: def __init__(self): self.tc1 = TC1() self.tc2 = TC2() self.tc3 = TC3() def runAll(self): self.tc1.run() self.tc2.run() self.tc3.run() #Client if __name__ == '__main__': testrunner = TestRunner() testrunner.runAll()
運(yùn)行結(jié)果:
更多關(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ì)有所幫助。
相關(guān)文章
Python控制windows系統(tǒng)音量實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了Python控制windows系統(tǒng)音量實(shí)現(xiàn)實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01python讀取mat文件生成h5文件的實(shí)現(xiàn)
這篇文章主要介紹了python讀取mat文件生成h5文件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07python selenium 彈出框處理的實(shí)現(xiàn)
這篇文章主要介紹了python selenium 彈出框處理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02Python自動(dòng)化測(cè)試ConfigParser模塊讀寫(xiě)配置文件
本文主要介紹Python自動(dòng)化測(cè)試,這里詳細(xì)說(shuō)明了ConfigParser模塊讀寫(xiě)配置文件,有興趣的小伙伴可以參考下2016-08-08對(duì)numpy中數(shù)組轉(zhuǎn)置的求解以及向量?jī)?nèi)積計(jì)算方法
今天小編就為大家分享一篇對(duì)numpy中數(shù)組轉(zhuǎn)置的求解以及向量?jī)?nèi)積計(jì)算方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10python實(shí)現(xiàn)給數(shù)組按片賦值的方法
這篇文章主要介紹了python實(shí)現(xiàn)給數(shù)組按片賦值的方法,實(shí)例分析了Python在指定位置進(jìn)行賦值的相關(guān)技巧,需要的朋友可以參考下2015-07-07Python多進(jìn)程協(xié)作模擬實(shí)現(xiàn)流程
當(dāng)多個(gè)進(jìn)程使用同一份數(shù)據(jù)資源的時(shí)候,因?yàn)檫M(jìn)程的運(yùn)行沒(méi)有順序,運(yùn)行起來(lái)也無(wú)法控制,如果不加以干預(yù),往往會(huì)引發(fā)數(shù)據(jù)安全或順序混亂的問(wèn)題,所以要在多個(gè)進(jìn)程讀寫(xiě)共享數(shù)據(jù)資源的時(shí)候加以適當(dāng)?shù)牟呗?,?lái)保證數(shù)據(jù)的一致性問(wèn)題2023-01-01