什么是代理模式
定义
定义1:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。
定义2:为某个对象提供一个代理,以控制对这个对象的访问,可在不修改源代码的基础上做方法增强。
以一个通俗的例子解释下上面的定义:
我们在Windows电脑上安装了QQ,然后我们找到了QQ的安装目录,右键点击QQ.exe,创建一个桌面快捷方式。
YES,通过上面的操作,你已经成功创建了一个QQ.exe的代理。
安装目录下的QQ.exe就是目标对象,桌面快捷方式则是代理对象,而创建快捷方式的过程,就是创建了一个代理,我们通过点击桌面快捷方式,就能调用到安装目录下的QQ.exe。
熟悉Windows的童靴可能知道,快捷方式不仅仅可以启动目标对象,还能携带一些参数去启动目标对象,这就是代理的作用之一,增强功能,添加控制。
再举几个栗子
- 买火车票不一定在火车站买,也可以去代售点
- 买二手房时的房产中介
- 一张支票或银行存单是账户中资金的代理
为什么要用代理模式
优点
- 协调调用者和被调用者,降低了系统的耦合度
- 代理对象作为客户端和目标对象之间的中介,起到了保护目标对象的作用
缺点
- 由于在客户端和真实主题之间增加了代理对象,因此会造成请求的处理速度变慢
- 实现代理模式需要额外的工作(有些代理模式的实现非常复杂),从而增加了系统实现的复杂度
怎么实现代理代理模式(Java)
静态代理
1 | import java.util.*; |
程序输出如下
1 | Loading HiRes_10MB_Photo1 |
动态代理
JDK代理
1 | package tech.zhaojian.jdk; |
Cglib代理
1 | package tech.zhaojian.cglib; |
参考链接: