静态代理

静态代理

上一篇讲了动态代理,接下里就说说静态代理。静态代理就是面向接口编程,在代理类中调用真实对象的行为。
cd337e41-6ee8-3619-a1c4-a2c096fb711c

先上代码:
[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)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。

发表评论

您的电子邮箱地址不会被公开。