Python筆記之facade模式
facade模式,即門(mén)面模式,也稱(chēng)外觀模式,這個(gè)模式的核心思想是使用facade對(duì)象為外部客戶(hù)端提供一個(gè)統(tǒng)一的訪問(wèn)一組子系統(tǒng)的接口,即客戶(hù)端不會(huì)直接與各個(gè)子系統(tǒng)交互,而是通過(guò)facade對(duì)象與各個(gè)子系統(tǒng)進(jìn)行通信并使用子系統(tǒng)的相應(yīng)功能。
可以通過(guò)下面這個(gè)圖來(lái)理解facade模式:
子系統(tǒng):各個(gè)子系統(tǒng)原則上都是獨(dú)立存在的,互不干涉的,重要的是它們都不會(huì)去關(guān)注facade對(duì)象,更不會(huì)去引用facade對(duì)象。
facade:facade對(duì)象負(fù)責(zé)將各個(gè)子系統(tǒng)組合成在一起,并為外部提供一個(gè)“舒適的外觀”和訪問(wèn)接口。
客戶(hù)端:客戶(hù)端通過(guò)facade對(duì)象去和各個(gè)子系統(tǒng)進(jìn)行交互,不會(huì)直接去和各個(gè)子系統(tǒng)打交道。
簡(jiǎn)單示例:
class Shampoo: """子系統(tǒng):賣(mài)各種洗發(fā)露""" def __init__(self): print('We sell all kinds of shampoo!') def piaorou_500ml(self, number): print('This is 500ml piaorou shampoo! Total: %d' % number) class WashingPowder: """子系統(tǒng):賣(mài)各種洗衣粉""" def __init__(self): print('We sell all kinds of washing powder!') def libai_3kg(self, number): print('This is 3kg libai washing powder! Total: %d' % number) class Tissue: """子系統(tǒng):賣(mài)各種抽紙""" def __init__(self): print('We sell all kinds of tissue!') def jierou_200sheets(self, number): print('This is 200 sheets tissue! Total: %d' % number) class Salesman: """facade:售貨員""" def __init__(self): self.shampoo = Shampoo() self.washing_powder = WashingPowder() self.tissue = Tissue() print('What can I help you?') def sale_for_family(self): """家庭套餐""" self.shampoo.piaorou_500ml(1) self.washing_powder.libai_3kg(2) self.tissue.jierou_200sheets(6) class UncleLi: """客戶(hù)端:李大爺""" def __init__(self): print('I want bug something!') def buy_for_family(self): """直接從售貨員那里購(gòu)買(mǎi)家庭套餐""" sale_man = Salesman() sale_man.sale_for_family()
其他與facade模式思想相近的編程原則也可以參考下,但需要注意的是“原則”本身需要根據(jù)具體情況來(lái)靈活應(yīng)用,而不是一定要這么做:
最少知識(shí)原則:最少知識(shí)意味著需要盡量減少對(duì)象之間的交互,但是也需要注意以下幾點(diǎn):
- 在設(shè)計(jì)系統(tǒng)時(shí),在創(chuàng)建每個(gè)對(duì)象時(shí),都需要多考查下會(huì)與之交互的類(lèi)的數(shù)量以及交互的方式。
- 避免多個(gè)對(duì)象彼此緊密耦合的情況。
迪米特法則:它是一個(gè)設(shè)計(jì)準(zhǔn)則,包含以下幾點(diǎn):
- 每個(gè)單元對(duì)系統(tǒng)中其他單元知道得越少越好。
- 每個(gè)單元只與其朋友交流。
- 單元不應(yīng)該知道它操作的對(duì)象的內(nèi)部細(xì)節(jié)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
matplotlib實(shí)現(xiàn)區(qū)域顏色填充
這篇文章主要為大家詳細(xì)介紹了matplotlib實(shí)現(xiàn)區(qū)域顏色填充,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03Python Django獲取URL中的數(shù)據(jù)詳解
這篇文章主要介紹了Python Django獲取URL中的數(shù)據(jù)詳解,小編覺(jué)得挺不錯(cuò)的,這里分享給大家,供需要的朋友參考2021-11-11Python中的np.vstack()和np.hstack()詳解
這篇文章主要介紹了np.vstack()和np.hstack(),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04一篇文章帶你搞定Ubuntu中打開(kāi)Pycharm總是卡頓崩潰
這篇文章主要介紹了一篇文章帶你搞定Ubuntu中打開(kāi)Pycharm總是卡頓崩潰,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11openCV-Python筆記之解讀圖像的讀取、顯示和保存問(wèn)題
這篇文章主要介紹了openCV-Python筆記之解讀圖像的讀取、顯示和保存問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12使用Python實(shí)現(xiàn)提取PDF文件中指定頁(yè)面的內(nèi)容
在日常工作和學(xué)習(xí)中,我們經(jīng)常需要從PDF文件中提取特定頁(yè)面的內(nèi)容,本文主要為大家詳細(xì)介紹了如何使用Python編程語(yǔ)言和兩個(gè)強(qiáng)大的庫(kù)——pymupdf和wxPython來(lái)實(shí)現(xiàn)這個(gè)任務(wù),需要的可以了解下2023-12-12詳解python如何調(diào)用C/C++底層庫(kù)與互相傳值
Python作為一門(mén)腳本解釋語(yǔ)言,本身又很好的結(jié)合C++,所以使用Python開(kāi)發(fā),在性能要求的地方調(diào)用C/C++底層庫(kù),這簡(jiǎn)直是神器。本文詳細(xì)介紹了Python調(diào)用C/C++底層庫(kù),互相傳值問(wèn)題,下面一起來(lái)看看。2016-08-08python環(huán)境中的概念conda中與環(huán)境相關(guān)指令操作
這篇文章主要介紹了python環(huán)境中的概念conda中與環(huán)境相關(guān)指令操作,虛擬環(huán)境是從電腦獨(dú)立開(kāi)辟出來(lái)的環(huán)境,文章介紹了相關(guān)概念,需要的朋友可以參考下2023-03-03