@Cesar
2016-01-07T10:05:05.000000Z
字数 1253
阅读 1618
Java
// 创建接口方法package test0107.te2;public interface Subject {public void operate1();}
package test0107.te2;public class RealSubject implements Subject{@Overridepublic 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动态代理