翻墻常用的方式就是使用代理(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)的一個具體例子。
維基百科對代理模式做了以下解釋:
基于面向過程實現(xiàn)的代理模式
下面是一段體現(xiàn)該設(shè)計模式中心的面向過程的python代碼:
def proxy():
print 'prepare....'
hello()
print 'finish....'
if __name__ == '__main__':
proxy()
基于面向?qū)ο髮崿F(xiàn)的代理模式
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方法改為:
新聞熱點
疑難解答
圖片精選