静态代理
0. 简介
代理模式有两种形式:静态代理、动态代理。
1. 类图
分析:
1. 代理类和被代理类必须实现同一个接口Subject
;
2. 代理类持有被代理类的对象RealSubject
;
3. 客户端Client
持有的实际是代理对象Proxy
;
代理类和被代理类必须实现同一个接口的原因:
因为代理类要与被代理类具有相同的行为,而接口内的方法即表示对象的行为,实现同一个接口代表了代理类具备和被代理类相同的行为。
2. 实例
public interface Subject {
void execute();
void execute(String arg);
}
public class RealSubject implements Subject {
public void execute() {
System.out.println("RealSubject.execute()");
}
public void execute(String arg) {
System.out.println("RealSubject.execute(arg)");
}
}
// 代理类
public class SubjectProxy implements Subject {
// 持有被代理类的对象
private Subject subject = null;
public SubjectProxy() {}
// 被代理对象可通过构造传入
public SubjectProxy(RealSubject realSubject) {
this.subject= realSubject;
}
public void execute() {//用到时候才加载,懒加载
if(realSubject == null) {
subject = new RealSubject(); //直接放在代理类里面,耦合度比较高;
}
subject.execute();
}
//execute(arg)方法同理 ...
}
// 客户端调用代理对象
public class Client {
public static void main(String [] args) {
SubjectProxy proxy = new SubjectProxy();
proxy.execute();
proxy.execute("参数");
}
}