Python設(shè)計(jì)模式之代理模式簡(jiǎn)單示例
本文實(shí)例講述了Python設(shè)計(jì)模式之代理模式。分享給大家供大家參考,具體如下:
代理模式在一般形式上是一個(gè)類函數(shù)接口。代理可以是這些事物的接口:網(wǎng)絡(luò)連接,存儲(chǔ)的對(duì)象,文件,或者其他資源(昂貴的或者不容易復(fù)制的)。
一個(gè)眾所周知的代理模式的例子就是引用計(jì)數(shù)的指針對(duì)象。
代理模式是結(jié)構(gòu)設(shè)計(jì)模式的例子。這個(gè)模式的目的是要?jiǎng)?chuàng)建一個(gè)真實(shí)對(duì)象或類的代理。
代理模式有3個(gè)必要的元素:
1. 真實(shí)的對(duì)象(執(zhí)行業(yè)務(wù)邏輯,被代理的對(duì)象)
2. 代理類(用戶請(qǐng)求的一個(gè)接口,對(duì)真實(shí)目標(biāo)的保護(hù))
3. 用戶(獲取任務(wù)的用戶請(qǐng)求)
代理模式存在在以下的情形中:
① 為真實(shí)目標(biāo)類創(chuàng)建一個(gè)對(duì)象的代價(jià)是昂貴的,一個(gè)簡(jiǎn)單對(duì)象被代理類創(chuàng)建是便宜的方法。
② 對(duì)象必須防止被用戶直接使用。
③ 當(dāng)實(shí)際請(qǐng)求的時(shí)候,為真實(shí)目標(biāo)類創(chuàng)建一個(gè)對(duì)象會(huì)有延遲。
用一些真實(shí)世界的代理模式例子,allapplabs 和 userpages 來描述:
使用緩存代理能夠馬上緩存用戶請(qǐng)求的web頁面。這個(gè)方法能夠避免更多重復(fù)的請(qǐng)求,改善性能。
消息box用進(jìn)度條的方式傳遞程序執(zhí)行狀態(tài)
用文字處理程序打開一個(gè)文件,導(dǎo)入一個(gè)消息說,“please wait while the software opens the document”
一個(gè)簡(jiǎn)單的python實(shí)現(xiàn);
讓我們想想一個(gè)正規(guī)辦公的場(chǎng)景,為了向一個(gè)公司的銷售主管談話,用戶首先會(huì)向銷售主管辦公室的接待員打個(gè)電話,隨后接待員轉(zhuǎn)接電話。在這個(gè)例子中,銷售主管會(huì)是用戶希望交談的目標(biāo),接待員就是一個(gè)代理,保護(hù)主體不受用戶直接要求談話中苦惱。
擴(kuò)展這個(gè)例子,我門可以認(rèn)為'銷售主管'是一個(gè)真正的目標(biāo),創(chuàng)建一個(gè)常用的目標(biāo)類作為管理者,接待員可以繼承。
#coding=utf8 import time class Manager(object): def work(self): pass def talk(self): pass class SalesManager(Manager): def work(self): print "Sales Manager working..." def talk(self): print "Sales Manager ready to talk" class Proxy(Manager): def __init__(self): self.busy = 'No' self.sales = None def work(self): print "Proxy checking for Sales Manager availability" if self.busy == 'Yes': self.sales = SalesManager() time.sleep(2) self.sales.talk() else: time.sleep(2) print "Sales Manager is busy" if __name__ == '__main__': p = Proxy() p.busy = 'Yes' p.work()
運(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 合并多個(gè)格式一致的 Excel 文件(推薦)
這篇文章主要介紹了使用 Python 合并多個(gè)格式一致的 Excel 文件,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12Python3.4編程實(shí)現(xiàn)簡(jiǎn)單抓取爬蟲功能示例
這篇文章主要介紹了Python3.4編程實(shí)現(xiàn)簡(jiǎn)單抓取爬蟲功能,涉及Python3.4網(wǎng)頁抓取及正則解析相關(guān)操作技巧,需要的朋友可以參考下2017-09-09Python靜態(tài)類型檢查新工具之pyright 使用指南
這篇文章主要介紹了Python靜態(tài)類型檢查新工具之pyright 使用指南,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04Python數(shù)據(jù)分析之matplotlib繪圖詳解
這篇文章主要為大家詳細(xì)介紹了Python數(shù)據(jù)分析之如何利用matplotlib進(jìn)行繪圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-09-09使用tensorflow實(shí)現(xiàn)線性svm
這篇文章主要為大家詳細(xì)介紹了使用tensorflow實(shí)現(xiàn)線性svm的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09python dataframe實(shí)現(xiàn)統(tǒng)計(jì)行列中零值的個(gè)數(shù)
這篇文章主要介紹了python dataframe實(shí)現(xiàn)統(tǒng)計(jì)行列中零值的個(gè)數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02python調(diào)用百度REST API實(shí)現(xiàn)語音識(shí)別
這篇文章主要為大家詳細(xì)介紹了python調(diào)用百度REST API實(shí)現(xiàn)語音識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08淺談四種快速易用的Python數(shù)據(jù)可視化方法
這篇文章主要介紹了淺談四種快速易用的Python數(shù)據(jù)可視化方法,數(shù)據(jù)可視化,是指用圖形的方式來展現(xiàn)數(shù)據(jù),從而更加清晰有效地傳遞信息,主要方法包括圖表類型的選擇和圖表設(shè)計(jì)的準(zhǔn)則,需要的朋友可以參考下2023-04-04