1700460949
1700460950
我们还是让代练者帮我们打游戏,但是我们既没有创建代理类,也没有实现IGamePlayer接口,这就是动态代理。别急,动态代理可不仅仅就这么多内容,还有更重要的,如果想让游戏登录后发一个信息给我们,防止账号被人盗用嘛,该怎么处理?直接修改被代理类GamePlayer?这不是一个好办法,好办法如代码清单12-24所示。
1700460951
1700460952
代码清单12-24 修正后的动态代理
1700460953
1700460954
public class GamePlayIH implements InvocationHandler{
1700460955
1700460956
//被代理者
1700460957
1700460958
Class cls=null;
1700460959
1700460960
//被代理的实例
1700460961
1700460962
Object obj=null;
1700460963
1700460964
//我要代理谁
1700460965
1700460966
public GamePlayIH(Object_obj){
1700460967
1700460968
this.obj=_obj;
1700460969
1700460970
}
1700460971
1700460972
//调用被代理的方法
1700460973
1700460974
public Object invoke(Object proxy,Method method,Object[]args)
1700460975
1700460976
throws Throwable{
1700460977
1700460978
Object result=method.invoke(this.obj,args);
1700460979
1700460980
//如果是登录方法,则发送信息
1700460981
1700460982
if(method.getName().equalsIgnoreCase(“login”)){
1700460983
1700460984
System.out.println(“有人在用我的账号登录!”);
1700460985
1700460986
}
1700460987
1700460988
return result;
1700460989
1700460990
}
1700460991
1700460992
}
1700460993
1700460994
看粗体部分,只要在代理中增加一个判断就可以决定是否要发送信息,运行结果如下:
1700460995
1700460996
开始时间是:2009-8-25 10:45
1700460997
1700460998
登录名为zhangSan的用户 张三登录成功!
[
上一页 ]
[ :1.700460949e+09 ]
[
下一页 ]