香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

Python设计模式之代理模式实例


时间:2021-02-07 11:23 作者:admin610456


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

浏览器<-->代理服务器<-->服务器

如果浏览器请求不到服务器,或者服务器无法响应浏览器,我们可以设定将浏览器的请求传递给代理服务器,代理服务器将请求转发给服务器。然后,代理服务器将服务器的响应内容传递给浏览器。当然,代理服务器在得到请求或者响应内容的时候,本身也可以做些处理,例如缓存静态内容以加速,或者说提取请求内容或者响应内容做些正当或者不正当的分析。这种翻墙方式,就是设计模式中代理模式(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.

基于面向过程实现的代理模式

下面是一段体现该设计模式中心的面向过程的python/' target='_blank'>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....
有没有想到装饰器?


基于面向对象实现的代理模式

复制代码 代码如下:
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的初始化函数init有参数,代理类ProxySubject可以作两种方式的修改: 第一种: ProxySubject的init方法同样也有参数,初始化代理类的时候将初始化参数传递给RealSubject。 第二种: 将ProxySubject的init方法改为:
复制代码 代码如下:
def __init__(self):
self.__rs = None
将ProxySubject的request方法改为:
复制代码 代码如下:
def request(self, *args, **kwargs):
if self.__rs == None:
self.__rs = RealSubject(*args, **kwargs)
self.__beforeRequest()
self.__rs.request()
self.__afterRequest()
的类似形式。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)