首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

Java设计模式之署理模式

2013-11-08 
Java设计模式之代理模式代理模式:我们先理解下面几个类,或许对你有所帮助。1.InvocationHandler在代理模式

Java设计模式之代理模式
代理模式:
   我们先理解下面几个类,或许对你有所帮助。
1.InvocationHandler
   在代理模式中我们需要实现该接口。该接口有一个方法invoke()方法,如下:

 public Object invoke(Object proxy, Method method, Object[] args)throws Throwable;


参数理解:
proxy:需要被调用的代理对象
method:代理对象的方法。
args:代理对象方法的参数。

   大家可能在想,为什么一个类中有参数,有构造方法,有get和set器,有类名,有实现接口,父类等等,这里只有三个参数?
   其实代理模式调用的是接口,接口有方法,接口名,接口的属性,方法的参数,所以invoke方法的参数可以满足代理。

2.Proxy
   Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。

废话不多说了 直接上代码分析。

package org.shen.proxy;public interface Subject {public String say(String name,int age);}

Subject接口包含say方法,方法中有name和age属性。

package org.shen.proxy;public class RealSubject implements Subject{@Overridepublic String say(String name, int age) {return name + " -- " + age;}}


package org.shen.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class MyInvocationHandler implements InvocationHandler{private Object obj = null;public Object bind(Object obj){this.obj = obj;return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {Object temp = method.invoke(obj, args);return temp;}}


package org.shen.proxy;public class TestProxy {public static void main(String[] args) {//使用代理MyInvocationHandler demo = new MyInvocationHandler();Subject sv = (Subject)demo.bind(new RealSubject());String info = sv.say("shenyc", 2);System.out.println(info);System.out.println("----------");//不使用代理//如果不使用代理,就会去实现接口Subject,即创建一个实现类//使用代理的话直接到代理那儿去拿接口。Subject s = new Subject() {@Overridepublic String say(String name, int age) {return name +  "   " +age ;}};String infoa = s.say("shenyc", 21);System.out.println(infoa);//new一个实例Subject ss = new RealSubject();String infob = ss.say("shenyc", 22);System.out.println(infob);}}


输出结果:

shenyc -- 2
----------
shenyc   21
shenyc -- 22

热点排行