一、概念
为另一个对象提供一个替身或占位符以控制对这个对象的访问
使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象
控制对象访问
二、基本内容
- RealSubject通常是真正做事的对象,proxy会控制对RealSubject的访问。
- Proxy持有Subject的引用,所以必要时它可以将请求转发给Subject
- Proxy和RealSubject都实现了Subject接口,这允许任何客户都可以像处理RealSubject对象一样地处理proxy对象
- 特点:保护目标对象,增强目标对象
- 扩展:静态代理,动态代理,CGLib代理
- 优点:职责清晰,高扩展
三、代码示例
(1)创建公共接口
public interface Subject {
void request();
}
(2)创建代理对象
public class Proxy implements Subject{
private Subject subject;
public Proxy(Subject subject){
this.subject = subject;
}
@Override
public void request() {
System.out.println("代理执行前......");
subject.request();
System.out.println("代理执行后......");
}
}
(3)创建真实对象
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("真实执行");
}
}
(4)测试调用
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
Proxy proxy = new Proxy(realSubject);
proxy.request();
}
//========结果============
代理执行前......
真实执行
代理执行后......
四、类图
五、应用场景
- spring中的AOP