定义
- 为其他对象提供一种代理,以控制对这个对象的访问;
- 代理对象在客户端和目标对象之间起到中介的作用;
适用场景
- 保护目标对象;
- 增强目标对象;
优点
- 代理模式能将代理对象与真实被调用的目标对象分离;
- 在一定程度上降低了系统的耦合度,扩展性好;
- 保护目标对象;
- 增强目标对象;
缺点
- 代理模式会造成系统设计中类的数目增加;
- 在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢;
- 增加系统的复杂度;
扩展
- 静态代理;
- 动态代理(JDK中的动态代理只能对实现了接口的类进行代理);
- CGLib代理;
- Spring代理的选择;
- 当Bean有实现接口时,Spring就会用JDK的动态代理;
- 当Bean没有实现接口时,Spring使用CGlib;
- 可以强制使用Cglib;
- https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html
- 代理速度对比
相关设计模式
- 代理模式 & 装饰器模式;
- 代理模式 & 适配器模式;