|
|

前几天一个网友指出了我的文章中一些有失偏颇之处,那些文章都是我在阅读Java Core的时候做的总结,顺便加上我个人的一些理解。因为看的e文版,理解上有些地方可能还欠妥。下面谈一下对Java中代理模式(Proxy)的认识。
代理,想必大家都应该知道是什么冬冬了,一般的手机产商都有代理商,歌星们都有自己的经纪人,如此这些都可以看作是一种代理模式。下面我选择如下的一种情景来进行讲述:某董事长出差,但是此时公司有个聚会,董事长买单,但是由他的秘书去结帐。我们就权且把这个看作一个代理行为,^_^。
首先我们定义一个接口:商人(Merchant),如下所示:
package cn.edu.hust.cm.test;
public interface Merchant {
void treat();//商人都要请客吃饭滴,^_^
}
然后我们定义一个类:董事长(Director),如下所示:
package cn.edu.hust.cm.test;
public class Director implements Merchant {
public Director() {
}
public void treat() {
System.out.println("董事长请大家吃饭");
}
}
OK,我们现在要给他找代理了,这个代理就是他的秘书(Secretary)。这里要涉及到一些代理的机制了。在Java中,用来做代理的类一般都要实现 InvocationHandler,实现它的invoke方法,至于为啥是这样俺也不知道了,^_^。另外,当我们产生一个代理实例(proxy instance)的时候,只要我们通过这个实例调用任何方法,都会导致invoke方法的调用,还是看例子吧,如下所示:
package cn.edu.hust.cm.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class Secretary implements InvocationHandler {
public Secretary(Director director) {
this.director=director;
}
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
director.treat();
System.out.println("由秘书结帐咯!");
return null;
}
private Director director; |
|