专栏首页开发杂记设计模式--Proxy模式

设计模式--Proxy模式

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

代理模式

1、什么是代理模式?

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

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

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

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

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

  • 如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法,增加了代码维护的复杂度
  • 静态代理中,目标类与其代理类是一一对应的。但是,会存在这样的情况:有N个类型不同的目标类,但是代理类中的“预处理、后处理”都是相同的,仅仅是调用目标类不同。若采用静态代理,那么必然需要手动创建N个代理类,很麻烦 2、动态代理 动态代理在运行期为各个目标类分别生成代理类,共享“预处理,后处理”功能,不需要事先知道目标对象的类型,这样可以大大减小程序规模。动态主要有两种,一种jdk动态代理,另外一种是cglib代理。这里限于篇幅,下篇学习笔记再总结。

参考资料:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • logback.xml配置示例

    河岸飞流
  • Java对于表达式中的自动类型提升

    河岸飞流
  • zTree设置异步加载后展开

    河岸飞流
  • 2.3.1 理解动态代理 -《SSM深入解析与项目实战》

    Spring中AOP的拦截功能就是使用Java中的动态代理实现的。也就是在被代理类(方法)的基础上增加切面逻辑,生成代理类(方法)。切面的逻辑可以在目标类函数执...

    谙忆
  • 所有和Java中代理有关的知识点都在这了。

    对于每一个Java开发来说,代理这个词或多或少都会听说过。你可能听到过的有代理模式、动态代理、反向代理等。那么,到底什么是代理,这么多代理又有什么区别呢。本文就...

    java思维导图
  • Spring知识点(五)代理模式

    使用代理模式的目的是为了将原来类生成一个代理类,由代理类来执行原来类的一些增强方法,但是也不影响原来类中方法的执行。

    虞大大
  • 爬虫代理哪家强?十大付费代理详细对比评测出炉!

    前言 随着大数据时代的到来,爬虫已经成了获取数据的必不可少的方式,做过爬虫的想必都深有体会,爬取的时候莫名其妙 IP 就被网站封掉了,毕竟各大网站也不想自己的...

    崔庆才
  • 聊聊Java动态代理(上)

    前言 在之前的文章《聊聊设计模式之代理模式》中,笔者为大家介绍了代理模式,在这里简单回顾一下。代理模式的作用是提供一个代理来控制对一个对象的访问,因此我们可以...

    黄泽杰
  • 付费代理的使用

    崔庆才
  • 【Java入门提高篇】Day12 Java代理——Cglib动态代理

      今天来介绍另一种更为强大的代理——Cglib动态代理。   什么是Cglib动态代理?   我们先回顾一下上一篇的jdk动态代理,jdk动态代理是通过接口来...

    弗兰克的猫

扫码关注云+社区

领取腾讯云代金券