本帖最后由 -_-# 于 2014-7-23 12:00 编辑
(⊙o⊙)…。。。
今天面试完,。。。面试38.,
水平太次。。。。。。。。。。。说话说不清楚大舌头的人就是硬伤。
前段时间研究了代理。,并且也实现了一些很可爱的想法。看到群里各种人叫唤代理难,,好难。。。。
。。。。。。。。。。。。。。。。
其实
。。。。。。。。。。。。。
很简单。
。。。。。。。。。。
看下面丑陋的图图,先看明白解释图谱,再玩代理。。这样可以直接拿代理来用,懂原理,方法算个鸟~!哈哈
。。。。。。。。。。
上图是正常情况下的。。
现在。。。。这人直接光着身子去打劫,太傻了吧。。。
所以我想要打劫的时候,我先得蒙脸,打劫完,,哈哈数钱。。。。当然我抢钱的时候也要蒙脸,抢完也要数钱。。。。。
现在出现代理的情况。。。。如下图
第一步
准备一个实现类,一个代理类。代理类有方法蒙面,数钱
第二步
关进小黑屋商量。。。商量在用打劫方法时后先蒙面还是数钱,,其实在代码中就是代理类方法的摆放位置
第三步
小黑屋出来就直接是一个对象
这个对象可以当做实现类的对象,调用实现类方法。。。。
只是在调用实现类方法同时,会同时调用小黑屋中给定的代理类方法。。。
下面是枯燥的代码讲解环节
按照上面的步骤。。。
第一步,准备taget类,这个是实现类。。实现了一个接口
接口
public interface Seachbaba {
public void dajie();
public void qiangqian ();
}
实现类
public class SeachcopyFile implements Seachbaba {
public void moveFileAction(File res) throws Exception
{
public void dajie () {system.out.println("打劫")}
public void qiangqian (){ system.out.println("抢钱") };
}
第二步,准备advice类代理类。实现一个接口
代理接口
public interface Advice {
public void beforeMethod() ;
public void afterMethod() ;
}
代理类
public class MyAdvicetime implements Advice {
long k;
public void beforeMethod()
{
k=System.currentTimeMillis();
}
public void afterMethod(){
long y=System.currentTimeMillis();
System.out.println(y-k);
}
}
第三步。。。既然实现类和代理类有。就可以直接关进小黑屋生成对象了
这里生成了一个实现类的代理对象 Object proxy3=Proxy.newProxyInstance
(
target.getClass().getClassLoader(),//要看出这里面是构造函数啊~!,这是第一个参数,实现类类的加载器
target.getClass().getInterfaces(),//第二个参数。实现类的爸爸类
new InvocationHandler()//这是第三个参数。这个要实现一个子类接口,这才是真正的小黑屋
{
public Object invoke(Object proxy,Method method,Object args[])//这里三个参数,第一个代表当前代理对象。。第二个,当前实现类代理对象所调用的的方法、、、第三个调用方法给的参数。。、、这些都不用改。内部自动各自找各自的东西
throws Exception
{
advice.beforeMethod(); //这个就是代理方法1
Object retval=method.invoke(target,args);//这个是指调用实现类代理对象当前调用的方法,比如你在调用打劫,则他就是打劫。
advice.afterMethod();//这个是代理方法2数钱啊~!、、、、、这些代理方法可以随便放在任意位置~!比如把数钱放到打劫前面,则他会在打劫前看看自己有多少钱。
return retval;//这里返回实现类代理对象调用打劫方法后的返回值,显然打劫方法没有返回值。
}
}
);
好了。。,,
第四步。。。可以直接用实现类代理对象。object proxy3调用实现类方法了。。。。必须转换对象类型。,比如。。taget类 k=(taget)proxy3;再用k来调用。。。。。
|
|