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

