• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

python设计模式–代理模式

Python admin 1个月前 (08-12) 76次浏览 0个评论 扫描二维码

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

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

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

    目的:

    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()

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


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明python 设计模式–代理模式
喜欢 (0)
admin
关于作者:

您必须 登录 才能发表评论!