什么是代理模式
代理模式的主要目的是通过代理对象访问目标对象,这样达到的效果和直接访问目标对象是一样的。
代理模式的应用场景比较多,比如AOP的底层实现等。
被代理对象的场景
- 远程对象,不方便直接访问
- 创建开销大的对象
- 需要安全控制的对象
- 需要加一些通用切面操作
怎样设计代理模式
首先需要知道客户端直接接触的是代理对象, 这个时候访问代理对象和访问原始对象一样。
客户端使用代码如下:
TeacherDao target = new TeacherDao();
ITeacherDao proxy = new xxx(看具体怎么实现) [静态代理 and JDK动态代理]
TeacherDao proxy = new xxx(看具体怎么实现) [CGLIB动态代理]
proxy.teach();
那么代理对象和原始对象需要通过某种方式进行代理通信,分为下面三种情况。
- 静态代理(代理对象和原始对象都实现了一个统一接口)
- JDK动态代理(原始对象需要实现接口,代理对象无需实现接口)
- Cglib代理(原始对象和代理对象都不需要实现接口)
静态代理
UML图: