打字猴:1.700460881e+09
1700460881
1700460882 }
1700460883
1700460884 }
1700460885
1700460886 其中invoke方法是接口InvocationHandler定义必须实现的,它完成对真实方法的调用。我们来详细讲解一下InvocationHanlder接口,动态代理是根据被代理的接口生成所有的方法,也就是说给定一个接口,动态代理会宣称“我已经实现该接口下的所有方法了”,那各位读者想想看,动态代理怎么才能实现被代理接口中的方法呢?默认情况下所有的方法返回值都是空的,是的,代理已经实现它了,但是没有任何的逻辑含义,那怎么办?好办,通过InvocationHandler接口,所有方法都由该Handler来进行处理,即所有被代理的方法都由InvocationHandler接管实际的处理任务。
1700460887
1700460888 我们接下来看看场景类,如代码清单12-23所示。
1700460889
1700460890 代码清单12-23 动态代理的场景类
1700460891
1700460892 public class Client{
1700460893
1700460894 public static void main(String[]args)throws Throwable{
1700460895
1700460896 //定义一个痴迷的玩家
1700460897
1700460898 IGamePlayer player=new GamePlayer(“张三”);
1700460899
1700460900 //定义一个handler
1700460901
1700460902 InvocationHandler handler=new GamePlayIH(player);
1700460903
1700460904 //开始打游戏,记下时间戳
1700460905
1700460906 System.out.println(“开始时间是:2009-8-25 10:45”);
1700460907
1700460908 //获得类的class loader
1700460909
1700460910 ClassLoader cl=player.getClass().getClassLoader();
1700460911
1700460912 //动态产生一个代理者
1700460913
1700460914 IGamePlayer proxy=(IGamePlayer)Proxy.newProxyInstance(cl,new
1700460915
1700460916 Class[]{IGamePlayer.class},handler);
1700460917
1700460918 //登录
1700460919
1700460920 proxy.login(“zhangSan”,“password”);
1700460921
1700460922 /开始杀怪
1700460923
1700460924 proxy.killBoss();
1700460925
1700460926 //升级
1700460927
1700460928 proxy.upgrade();
1700460929
1700460930 //记录结束游戏时间
[ 上一页 ]  [ :1.700460881e+09 ]  [ 下一页 ]