您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2026/1/30 6:44:39发布18次查看
翻墙常用的方式就是使用代理(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代码:
代码如下:
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()
的类似形式。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product