python设计模式–代理模式

2,691次阅读
没有评论

共计 952 个字符,预计需要花费 3 分钟才能阅读完成。

有的时候访问一个网站比较慢的时候,比如google需要通过第三方代理然后才能访问,整个的流程如下图所示:

python设计模式--代理模式

在设计模式中当然也存在代理模式,常见的有以下几个方面

  • 当需要为一个对象再不同的地址空间提供局部的代表时
    此时的代理模式称为远程代理:为一个对象在不同的地址空间提供局部代表。

    目的:

    1. 隐藏一个对象存在于不同地址空间的事实;
    2. 远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。
  • 当需要创建开销非常大的对象时
    此时的代理模式称为虚拟代理:通过使用过一个小的对象代理一个大对象。

    目的:减少系统的开销。

  • 当需要控制对原始对象的访问时
    此时的代理模式称为保护代理:控制目标对象的访问,给不同用户提供不同的访问权限

    目的:用来控制对真实对象的访问权限

  • 当需要在访问对象时附加额外操作时
    此时的代理模式称为智能引用代理,额外操作包括耗时操作、计算访问次数等等
    目的:在不影响对象类的情况下,在访问对象时进行更多的操作

以上是最常用的使用场景,其他还包括:

  • 防火墙代理:保护目标不让恶意用户靠近
  • Cache代理:为结果提供临时的存储空间,以便其他客户端调用

自己写了一个上面http请求代理的例子:

# -*- coding: utf-8 -*-
# @Time    : 2018/8/12 下午1:31
# @Author  : zhusimaji
# @File    : daili.py
# @Software: PyCharm
from functools import wraps
def google_delegate(func):
    @wraps(func)
    def real_http(cls):
        func(cls)
        print('{}   response by google '.format(cls.url ))
    return  real_http

class httphandle(object):
    def __init__(self,url):
        self.url=url
    @google_delegate
    def request(self):
        print(self.url)

if __name__ == '__main__':

    a=httphandle('www.baidu.com')
    a.request()

其实核心的思想都是一样的,就是在你直接做某件事的方式改为由代理来帮忙实现,在现实世界中常见的就如
房地产代理商链家等等。

正文完
请博主喝杯咖啡吧!
post-qrcode
 
admin
版权声明:本站原创文章,由 admin 2018-08-12发表,共计952字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码