读书人

理解Java中的代理模式

发布时间: 2012-08-27 21:21:57 作者: rapoo

了解Java中的代理模式

代理,想必大家都应该知道是什么冬冬了,一般的手机产商都有代理商,歌星们都有自己的经纪人,如此这些都可以看作是一种代理模式。下面我选择如下的一种情景来进行讲述:某董事长出差,但是此时公司有个聚会,董事长买单,但是由他的秘书去结帐。我们就权且把这个看作一个代理行为。?

?

首先我们定义一个接口:商人(Merchant),如下所示:?

?

?

package cn.edu.hust.cm.test;   import java.lang.reflect.InvocationHandler;   import java.lang.reflect.Proxy;   public class ProxyTest extends Proxy {   public ProxyTest(InvocationHandler arg0) {   super(arg0);   }   public static void main(String[] args) {   Director director=new Director();   InvocationHandler secretary=new Secretary(director);   Merchant merchant=(Merchant)Proxy.newProxyInstance(director.getClass().getClassLoader(),director.getClass().getInterfaces(),secretary);  merchant.treat();   }   } 

?

运行程序,输出将为:董事长请客?

  由秘书结帐咯!?

  这里有几个要说明的地方,如下所述:?

  1.Proxy.newProxyInstance方法的作用,它的作用为某个对象创建一个代理对象,本例中是为director创建了一个代理对象,这个对象属于哪个类呢?我们在程序里面加这样一句System.out.println(merchant.getClass().getName()),输出是$Proxy0,呵呵,说明已经产生了一个代理类了,这个类实现了director所属类中的所有接口。?

  2.代理的实现机制问题。个人觉得这个似乎就是一个事件处理的机制,当代理对象调用某个方法的时候,就会触发相应的invoke方法。因此Proxy.newProxyInstance方法的第三个参数就相当于给这个代理对象注册了一个监听器。?

  Proxy类还有几个方法,用法可以查看相应的API文档。

读书人网 >软件架构设计

热点推荐