概念
为其他对象提供一种代理,以控制对这个对象的访问
特点
对原有方法的加强,方法方法名不变
对方法加强:比如在方法的前后加上一些操作
代理模式最典型的 例子:Spring的aop,切面织入,在方法前后加上其他操作。
实现
Subject类定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy
- Subject抽象接口
abstract class Subject{
public abstract void Request();
}
- RealSubject类,定义了Proxy所代表的真实实体
public class RealSubject extends Subject {
@Override
public void Request() {
System.out.println("真实请求");
}
}
- Proxy类,保存一个引用使得代理可以访问实体,并提供一个与Subject 的接口相同的接口,这样代理就可以用来替代实体
public class Proxy extends Subject{
RealSubject realSubject;//引用
@Override
public void Request() {
if(realSubject==null){
realSubject= new RealSubject();
}
realSubject.Request();
}
}
- 客户端代码
public class Main {
public static void main(String[] args) {
Proxy proxy =new Proxy();
proxy.Request();//代理访问 的是实体的该方法
}
}