国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python設計模式之代理模式實例

2020-02-23 05:20:38
字體:
來源:轉載
供稿:網(wǎng)友

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

瀏覽器<-->代理服務器<-->服務器

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

維基百科對代理模式做了以下解釋:
代碼如下:
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.

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

下面是一段體現(xiàn)該設計模式中心的面向過程的python代碼:
代碼如下:
def hello():
    print 'hi, i am hello'

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

if __name__ == '__main__':
    proxy()
運行結果:
代碼如下:
prepare....
hi, i am hello
finish....
有沒有想到裝飾器?


基于面向對象實現(xiàn)的代理模式

代碼如下:
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ù),初始化代理類的時候將初始化參數(shù)傳遞給RealSubject。 第二種: 將ProxySubject的init方法改為:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 耒阳市| 平阳县| 大丰市| 甘谷县| 攀枝花市| 河源市| 吴堡县| 湘阴县| 岳普湖县| 会理县| 桐城市| 电白县| 林西县| 新巴尔虎左旗| 开原市| 容城县| 汉中市| 获嘉县| 沅陵县| 福鼎市| 洮南市| 南投市| 张家界市| 武冈市| 临高县| 新乐市| 凤台县| 花垣县| 惠东县| 茌平县| 马龙县| 布尔津县| 昌黎县| 天津市| 科技| 黄龙县| 宝坻区| 鄂托克前旗| 阜新市| 确山县| 平利县|