代理模式(Proxy Pattern)为指定的类的对象提供代理对象,并通过代理对象对原对象的引用,代理后者执行操作。主要分为静态代理和动态代理;我们以代理服务器为例;
静态代理
我们定义一个海外服务器
|
|
|
|
然后定义一个代理服务器
|
|
|
|
动态代理
对于动态代理来说,需要首先有一个实现InvocationHandler
接口的handler,可以简单认为是对被代理的方法的包装。InvocationHandler
的invoke(Object proxy, Method method, Object[] args)
方法,proxy
指的是动态生成的代理对象,method
指的是被代理的操作方法,args
指的是被代理方法的参数。
Handler有了,那么动态代理的对象怎么生成的呢?Java提供了Proxy
工具类newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
来生成代理对象。其中第一个参数loader
是类加载器,通常使用被代理类的类加载器即可;第二个参数interfaces
是被代理类所实现的接口类数组,可见这种代理方式仍然是基于接口代理的,第三个参数就是我们刚刚准备好的handler。
这个方法会返回一个代理对象,这个对象实现了interfaces
指定的接口,因此可以转换类型,然后就可以同静态代理一样的方式来使用了。
|
|
|
|