欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python設(shè)計模式之代理模式實(shí)例

 更新時間:2014年04月26日 11:17:59   作者:  
這篇文章主要介紹了設(shè)計模式中的代理模式Python實(shí)例,需要的朋友可以參考下

翻墻常用的方式就是使用代理(Proxy),其基本過程如下:

瀏覽器<-->代理服務(wù)器<-->服務(wù)器

如果瀏覽器請求不到服務(wù)器,或者服務(wù)器無法響應(yīng)瀏覽器,我們可以設(shè)定將瀏覽器的請求傳遞給代理服務(wù)器,代理服務(wù)器將請求轉(zhuǎn)發(fā)給服務(wù)器。然后,代理服務(wù)器將服務(wù)器的響應(yīng)內(nèi)容傳遞給瀏覽器。當(dāng)然,代理服務(wù)器在得到請求或者響應(yīng)內(nèi)容的時候,本身也可以做些處理,例如緩存靜態(tài)內(nèi)容以加速,或者說提取請求內(nèi)容或者響應(yīng)內(nèi)容做些正當(dāng)或者不正當(dāng)?shù)姆治?。這種翻墻方式,就是設(shè)計模式中代理模式(Proxy Pattern)的一個具體例子。

維基百科對代理模式做了以下解釋:

復(fù)制代碼 代碼如下:

In computer programming, the proxy pattern is a software design pattern. A proxy, in its most general form, is a class functioning as an interface to something else. The proxy could interface to anything: a network connection, a large object in memory, a file, or some other resource that is expensive or impossible to duplicate.

基于面向過程實(shí)現(xiàn)的代理模式

下面是一段體現(xiàn)該設(shè)計模式中心的面向過程的python代碼:

復(fù)制代碼 代碼如下:

def hello():
    print 'hi, i am hello'

def proxy():
    print 'prepare....'
    hello()
    print 'finish....'

if __name__ == '__main__':
    proxy()


運(yùn)行結(jié)果:
復(fù)制代碼 代碼如下:

prepare....
hi, i am hello
finish....

有沒有想到裝飾器?


基于面向?qū)ο髮?shí)現(xiàn)的代理模式

復(fù)制代碼 代碼如下:

class AbstractSubject(object):

    def __init__(self):
        pass

    def request(self):
        pass

class RealSubject(AbstractSubject):

    def __init__(self):
        pass
    def request(self):
        print 'hi, i am RealSubject'

class ProxySubject(AbstractSubject):

    def __init__(self):
        self.__rs = RealSubject()

    def request(self):
        self.__beforeRequest()
        self.__rs.request()
        self.__afterRequest()

    def __beforeRequest(self):
        print 'prepare....'

    def __afterRequest(self):
        print 'finish....'

if __name__ == '__main__':
    subject = ProxySubject()
    subject.request()

如果RealSubject的初始化函數(shù)init有參數(shù),代理類ProxySubject可以作兩種方式的修改: 第一種: ProxySubject的init方法同樣也有參數(shù),初始化代理類的時候?qū)⒊跏蓟瘏?shù)傳遞給RealSubject。 第二種: 將ProxySubject的init方法改為:

復(fù)制代碼 代碼如下:

def __init__(self):
    self.__rs = None

將ProxySubject的request方法改為:
復(fù)制代碼 代碼如下:

def request(self, *args, **kwargs):
    if self.__rs == None:
        self.__rs = RealSubject(*args, **kwargs)
    self.__beforeRequest()
    self.__rs.request()
    self.__afterRequest()

的類似形式。

相關(guān)文章

  • Python中accumulate函數(shù)的用法詳解

    Python中accumulate函數(shù)的用法詳解

    累積(accumulate)函數(shù)是Python標(biāo)準(zhǔn)庫itertools中的一個強(qiáng)大工具,用于對可迭代對象進(jìn)行累積操作,下面我們將深入探討accumulate函數(shù)的用法,感興趣的小伙伴可以了解下
    2023-11-11
  • 使用matlab或python將txt文件轉(zhuǎn)為excel表格

    使用matlab或python將txt文件轉(zhuǎn)為excel表格

    這篇文章主要介紹了matlab或python代碼將txt文件轉(zhuǎn)為excel表格,本文通過matlab代碼和python 代碼給大家詳細(xì)介紹,需要的朋友可以參考下
    2019-11-11
  • python實(shí)現(xiàn)12306火車票查詢器

    python實(shí)現(xiàn)12306火車票查詢器

    這篇文章主要介紹了python實(shí)現(xiàn)12306火車票查詢器,需要的朋友可以參考下
    2017-04-04
  • Python二維碼生成識別實(shí)例詳解

    Python二維碼生成識別實(shí)例詳解

    這篇文章主要介紹了Python二維碼生成識別實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Python入門教程(三十八)Python的NumPy庫簡介

    Python入門教程(三十八)Python的NumPy庫簡介

    這篇文章主要介紹了Python入門教程(三十八)Python的NumPy庫簡介,NumPy 是用于處理數(shù)組的 python 庫,它還擁有在線性代數(shù)、傅立葉變換和矩陣領(lǐng)域中工作的函數(shù),需要的朋友可以參考下
    2023-05-05
  • Python中單引號、雙引號和三引號具體的用法及注意點(diǎn)

    Python中單引號、雙引號和三引號具體的用法及注意點(diǎn)

    這篇文章主要給大家介紹了關(guān)于Python中單引號、雙引號和三引號具體的用法及注意點(diǎn)的相關(guān)資料,Python中單引號、雙引號、三引號中使用常常困惑,想弄明白這三者相同點(diǎn)和不同點(diǎn),需要的朋友可以參考下
    2023-07-07
  • Python中PyMySQL的基本操作

    Python中PyMySQL的基本操作

    PyMySQL?遵循?Python?數(shù)據(jù)庫?API?v2.0?規(guī)范,并包含了?pure-Python?MySQL?客戶端庫,這篇文章主要介紹了Spring?DI依賴注入詳解,需要的朋友可以參考下
    2022-11-11
  • Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)篩選及提取序列中元素的方法

    Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)篩選及提取序列中元素的方法

    這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)篩選及提取序列中元素的方法,涉及Python列表推導(dǎo)式、生成器表達(dá)式及filter()函數(shù)相關(guān)使用技巧,需要的朋友可以參考下
    2018-03-03
  • python編程羊車門問題代碼示例

    python編程羊車門問題代碼示例

    這篇文章主要介紹了python編程“羊車門”問題代碼示例,初步接觸,僅供參考。不足之處,歡迎指出。
    2017-10-10
  • 使用pygame編寫Flappy bird小游戲

    使用pygame編寫Flappy bird小游戲

    這篇文章主要介紹了使用pygame編寫Flappy bird小游戲的相關(guān)知識,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03

最新評論