博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代理模式
阅读量:5281 次
发布时间:2019-06-14

本文共 1295 字,大约阅读时间需要 4 分钟。

模式定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用,Proxy。

模式结构:

  • Subject: 抽象主题角色(委托对象和代理对象共同实现的接口)
  • Proxy: 代理主题角色
  • RealSubject: 真实主题角色

 

 

优点:

  • 代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
  • 远程代理使得客户端可以访问在远程机器上的对象,远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。
  • 虚拟代理通过使用一个小对象来代表一个大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度。
  • 保护代理可以控制对真实对象的使用权限。

缺点:

  • 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
  • 实现代理模式需要额外的工作,有些代理模式的实现 非常复杂。

 

静态代理和动态代理的区别

静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。

也就是说,动态代理需要传入被满足特定接口的代理类实例对象。

from abc import ABCMeta, abstractmethodclass Image(metaclass=ABCMeta):    @abstractmethod    def display(self):        passclass RealImage(Image):    def __init__(self,filename):        self._filename = filename    def display(self):        print("display:"+self._filename)    def loading(self):        print("load file ~")class ProxyImage(Image):    """静态代理"""    def __init__(self,filename):        self._filename = filename        self._real_image = None    def display(self):        """显示时加载"""        if self._real_image is None:            self._real_image = RealImage(self._filename)            self._real_image.loading()        self._real_image.display()if __name__ == "__main__":    proxy_image = ProxyImage("code.jpg")    # 图像加载    proxy_image.display()    # 图像不需要加载    proxy_image.display()

  

转载于:https://www.cnblogs.com/zenan/p/10361760.html

你可能感兴趣的文章
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
目前为止用过的最好的Json互转工具类ConvertJson
查看>>
Day13
查看>>
tensorflow saver简介+Demo with linear-model
查看>>
Luogu_4103 [HEOI2014]大工程
查看>>
Oracle——SQL基础
查看>>
项目置顶随笔
查看>>
Redis的安装与使用
查看>>
P1970 花匠
查看>>
java语言与java技术
查看>>
NOIP2016提高A组五校联考2总结
查看>>
iOS 项目的编译速度提高
查看>>
table中checkbox选择多行
查看>>
Magento开发文档(三):Magento控制器
查看>>
性能调优攻略
查看>>
ie6解决png图片透明问题
查看>>
瞬间的永恒
查看>>
2019-8-5 考试总结
查看>>
JS中实现字符串和数组的相互转化
查看>>
web service和ejb的区别
查看>>