共计 952 个字符,预计需要花费 3 分钟才能阅读完成。
有的时候访问一个网站比较慢的时候,比如google需要通过第三方代理然后才能访问,整个的流程如下图所示:
在设计模式中当然也存在代理模式,常见的有以下几个方面
- 当需要为一个对象再不同的地址空间提供局部的代表时
此时的代理模式称为远程代理:为一个对象在不同的地址空间提供局部代表。目的:
- 隐藏一个对象存在于不同地址空间的事实;
- 远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。
- 当需要创建开销非常大的对象时
此时的代理模式称为虚拟代理:通过使用过一个小的对象代理一个大对象。目的:减少系统的开销。
- 当需要控制对原始对象的访问时
此时的代理模式称为保护代理:控制目标对象的访问,给不同用户提供不同的访问权限目的:用来控制对真实对象的访问权限
- 当需要在访问对象时附加额外操作时
此时的代理模式称为智能引用代理,额外操作包括耗时操作、计算访问次数等等
目的:在不影响对象类的情况下,在访问对象时进行更多的操作
以上是最常用的使用场景,其他还包括:
- 防火墙代理:保护目标不让恶意用户靠近
- 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()
其实核心的思想都是一样的,就是在你直接做某件事的方式改为由代理来帮忙实现,在现实世界中常见的就如
房地产代理商链家等等。
正文完
请博主喝杯咖啡吧!