zoukankan      html  css  js  c++  java
  • 设计模式--Proxy模式

    这篇主要介绍代理模式相关内容,主要是一些基本概念普及。

    代理模式

    1、什么是代理模式?

    代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。[DP]

    通俗的说就是指客户端并不直接调用实际的对象,而是通过代理对象,来间接调用实际的对象。
    
    2、实现原理

    image
    Subject: 可以是接口,也可以是抽象类
    Proxy: 内部含有对真实对象RealSubject的引用,负责对真实主题角色的调用,并在真实主题角色处理前后做预处理和后处理
    proxied: 真实主题角色,业务逻辑的具体执行者

    3、代理模式应用
    • 远程代理,为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实[DP]。例如RPC远程调用
    • 虚拟代理,根据需要创建开销很大的对象。通过它来存放实例化需要很时间的真是对象[DP]。例如浏览器使用虚拟代理来代替真实的图片,代理中存储图片的大小和路径,待到下载优化的目的。
    • 安全代理,用来控制真实对象访问时的权限[DP]。例如权限控制
    • 智能指引, 是指当调用真实的对象时,代理处理另外一些事情。代理类本身并不真正实现服务,而是同过调用委托类的相关方法,来提供特定的服务。真正的业务功能还是由委托类来实现,但是可以在业务功能执行的前后加入一些公共的服务。例如我们想给项目加入缓存、日志这些功能,我们就可以使用代理类来完成,而没必要打开已经封装好的委托类。典型应用例如SpringAop、日志收集、过滤器等等。
    4、创建形式

    主要分静态代理动态代理

    1、静态代理

    静态代理其实就是代理类和被代理对象的关系在程序运行前已经确定好了(代码已经写好了),创建过程如下:

    1. 定义业务接口;
    2. 被代理类实现业务接口;
    3. 定义代理类并实现业务接口;
    4. 最后便可通过客户端进行调用。(这里可以理解成程序的main方法里的内容)

    这样一来就会带来如下弊端:

    • 如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法,增加了代码维护的复杂度
    • 静态代理中,目标类与其代理类是一一对应的。但是,会存在这样的情况:有N个类型不同的目标类,但是代理类中的“预处理、后处理”都是相同的,仅仅是调用目标类不同。若采用静态代理,那么必然需要手动创建N个代理类,很麻烦
    2、动态代理

    动态代理在运行期为各个目标类分别生成代理类,共享“预处理,后处理”功能,不需要事先知道目标对象的类型,这样可以大大减小程序规模。动态主要有两种,一种jdk动态代理,另外一种是cglib代理。这里限于篇幅,下篇学习笔记再总结。

    参考资料:

  • 相关阅读:
    Coursera机器学习week11 单元测试
    关于 TypeReference 的解释
    getModifiers 方法解释。
    instanceof isInstance isAssignableFrom 比较
    elasticsearch 基础 语法总结
    kibana 启动 关闭 和进程查找
    MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别
    spring boot 项目 热启动
    java zip 压缩文件
    Packet for query is too large (1660 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
  • 原文地址:https://www.cnblogs.com/xieshuang/p/10892703.html
Copyright © 2011-2022 走看看