静态代理
上一篇讲了动态代理,接下里就说说静态代理。静态代理就是面向接口编程,在代理类中调用真实对象的行为。
先上代码:
[java]
package com.learn.core.proxy;
public interface Subject {
public void doSth();
}
[/java]
真实对象
[java]
package com.learn.core.proxy;
public class RealSubject implements Subject {
@Override
public void doSth() {
System.out.println("call doSth()");
}
}
[/java]
代理对象
[java]
package com.learn.core.proxy;
public class StaticProxy {
public static void main(String args[]) {
RealSubject real = new RealSubject();
Subject proxySubject = new ProxySubject(real);
proxySubject.doSth();
}
}
[/java]
测试入口
[java]
package com.learn.core.proxy;
public class StaticProxy {
public static void main(String args[]) {
RealSubject real = new RealSubject();
Subject proxySubject = new ProxySubject(real);
proxySubject.doSth();
}
}
[/java]
–输出
do something before call
call doSth()
do something after call
总结
大家一看代码,相信就理解了什么是静态代理。通过实现一样的接口,代理类所有的调用都调用真实对象的方法。但是它的不足也非常明显:
1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,必须要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。
2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。