静态代理:
面向接口编程,客户端通过接口来引入目标对象,代理对象把真正的业务方法委托给目标对象,面向接口编程。
1、创建接口
public interface Subject {
void request();
}
2、创建目标对象
/**
* @author :panda
* 目标对象
*/
public class RealSubject implements Subject {
public void request() {
System.out.println("real subject execute request..");
}
}
3、创建代理对象
代理对象主要做两件事:
1、强引用目标对象
2、委托目标对象去执行业务方法
/**
* 代理对象
*/
public class Proxy implements Subject {
private RealSubject realSubject;
//需要在构造函数强引用目标对象
Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
public void request() {
System.out.println("before..");
try {
//委托目标对象去执行业务方法
realSubject.request();
} catch (Exception e) {
System.out.println("ex:"+e.getMessage());
}finally {
System.out.println("after..");
}
}
}
4、创建客户端访问目标对象方法
/**
* 客户端对象
*/
public class Client {
public static void main(String[] args) {
//客户端跟代理对象打交道
Subject subject = new Proxy(new RealSubject());
subject.request();
}
}
5、执行结果
缺点:
当目标对象方法多时,代码重复,冗余
eg:目标对象新增一个hello()方法。
我们需要:
1、接口新增一个方法
2、代理类新增一个方法-用来委托目标对象
3、客户端访问方式不变
4、输出
tip:
当目标对象方法增多,代理对象和接口将变得越来越庞大,代理对象自己的边缘代码也都是重复的