A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙百鑫 于 2013-6-15 08:35 编辑

动态代理看不大明白,张老师讲的感觉听的晕晕呼呼的,我网上又去找资料看动态代理,可是他们的动态代理是实现了InvocationHandler接口 和视频上讲的有点不一样啊,求一般格式,
希望给点简单易懂的代码,让我看明白动态代理什么意思 ,谢谢各位坛友了!

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1 很给力!

查看全部评分

9 个回复

正序浏览
To 金牌黑马 2013-6-15 15:51:46
9#
孙百鑫 发表于 2013-6-15 07:14
解决了之后请改分楼哦

是分类。!                                   
回复 使用道具 举报

嗯 多谢了
回复 使用道具 举报
刘茂林 发表于 2013-6-15 08:22
没找到编辑。。编辑不见了

那我帮您修改了:)
回复 使用道具 举报
孙百鑫 发表于 2013-6-15 07:14
解决了之后请改分楼哦

没找到编辑。。编辑不见了
回复 使用道具 举报
解决了之后请改分楼哦{:soso_e100:}
回复 使用道具 举报
格式哪里有会有固定的~·程序是OOP的思想的~·只要你的思路清晰就没有问题了~
程序不是死的是活的,要学会灵活运用,举一反三~
回复 使用道具 举报
′х.|鰉❤耔 发表于 2013-6-14 18:11
请注意,invoke(Object obj,Method method,Object[] args),这里的第一个参数obj其实可以看作没有用处的 ...

我无语了 只求你不复制粘贴。。
回复 使用道具 举报
  1. interface SellFisher {     int sellFish(); }  
  2. public class ConcreteSellFisher implements SellFisher {  
  3.     public int sellFish() { 
  4.          System.out.println("my fish is delicious!!");          return 10;     }  }  
  5. public class ProxySellFisher implements SellFisher {  
  6.     private SellFisher sell; 
  7.     public ProxySellFisher(SellFisher sell) {         this.sell = sell;     } 
  8.     public int sellFish() { 
  9.         System.out.println("the fish price higher");         return sell.sellFish()+10;     }  }
复制代码
  1. 但是如果代理类变成了InvocationHandler了,执行的方法 
  2. 是invoke了,从而变得更加灵活了,请看代码 
  3. public class ProxySellFisher implements InvocationHandler {  
  4.     private SellFisher sell; 
  5.     public ProxySellFisher(SellFisher sell) {         this.sell = sell;     } 
  6.     public Object invoke(Object obj, Method method, Object[] args) throws Throwable { 






  7.         System.out.println("the fish price higher");         return (Integer)method.invoke(sell, args)+10;     }  }   
  8. public class ClientTest { 
  9.     public static void main(String args[]) { 
  10.         SellFisher s = new ConcreteSellFisher(); 
  11.         InvocationHandler p = new ProxySellFisher(s);         Object obj = Proxy.newProxyInstance(s.getClass().getClassLoader(), s.getClass().getInterfaces(), p); 
  12.         ((SellFisher)obj).sellFish();     } }
复制代码
请注意,invoke(Object obj,Method method,Object[] args),这里的第一个参数obj其实可以看作没有用处的,不知道jdk为什么要把它也当作一个参数放这里,methd.invoke()方法,需要把原来的具体实现类作为参数传递进去,method.invoke(obj,args)相当于obj.method(args) 
总结,从设计模式的角度讲,大家以后编程中,尽量要面向接口,更通俗一点就是,一个类中使用的别的对象成员变量,最好定义成接口的变量而不是实际实现类的变量

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马