@Cesar
2016-01-07T18:05:05.000000Z
字数 1253
阅读 1404
Java
// 创建接口方法
package test0107.te2;
public interface Subject {
public void operate1();
}
package test0107.te2;
public class RealSubject implements Subject{
@Override
public void operate1() {
System.out.println("I am Operate1");
}
}
package test0107.te2;
public class ProxySubject extends RealSubject {
private RealSubject realSubject;
public ProxySubject() {
}
public void operate1() { // 该方法封装了真实对象的operate1方法
preRequest();
if (realSubject == null) {
realSubject = new RealSubject();
}
realSubject.operate1(); // 此处执行真实对象的request方法
postRequest();
}
private void preRequest() {
System.out.println("实现代理后在正式实现方法前我可以做出操作");
}
private void postRequest() {
System.out.println("实现代理后在正式实现方法后我可以做出操作");
}
}
package test0107.te2;
public class Test {
public static void main(String[] args) {
Subject subject = new ProxySubject();
subject.operate1();
}
}
结果如下:
实现代理后在正式实现方法前我可以做出操作
I am Operate1
实现代理后在正式实现方法后我可以做出操作
由此我们可以看出代理的作用:
封装了其他方法(preRequest(),postRequest()),可以处理一些其他问题。
另外,如果要按照上述的方法使用代理模式,那么真实角色必须是事先已经存在的,并将其作为代理对象的内部属性。但是实际使用时,一个真实角色必须对应一个代理角色,如果大量使用会导致类的急剧膨胀;此外,如果事先并不知道真实角色,该如何使用代理呢?这个问题可以通过Java的动态代理类来解决。具体请看我的另一篇文章Java动态代理