黑马程序员技术交流社区

标题: 动态代理到底是什么格式的啊??求解答? [打印本页]

作者: 刘茂林    时间: 2013-6-14 17:54
标题: 动态代理到底是什么格式的啊??求解答?
本帖最后由 孙百鑫 于 2013-6-15 08:35 编辑

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


作者: ′х.|鰉❤耔    时间: 2013-6-14 18:11
  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) 
总结,从设计模式的角度讲,大家以后编程中,尽量要面向接口,更通俗一点就是,一个类中使用的别的对象成员变量,最好定义成接口的变量而不是实际实现类的变量
作者: 刘茂林    时间: 2013-6-14 18:17
′х.|鰉❤耔 发表于 2013-6-14 18:11
请注意,invoke(Object obj,Method method,Object[] args),这里的第一个参数obj其实可以看作没有用处的 ...

我无语了 只求你不复制粘贴。。
作者: ′х.|鰉❤耔    时间: 2013-6-14 18:26
格式哪里有会有固定的~·程序是OOP的思想的~·只要你的思路清晰就没有问题了~
程序不是死的是活的,要学会灵活运用,举一反三~
作者: 孙百鑫    时间: 2013-6-15 07:14
解决了之后请改分楼哦{:soso_e100:}
作者: 刘茂林    时间: 2013-6-15 08:22
孙百鑫 发表于 2013-6-15 07:14
解决了之后请改分楼哦

没找到编辑。。编辑不见了
作者: 孙百鑫    时间: 2013-6-15 08:35
刘茂林 发表于 2013-6-15 08:22
没找到编辑。。编辑不见了

那我帮您修改了:)
作者: 刘茂林    时间: 2013-6-15 08:40
孙百鑫 发表于 2013-6-15 08:35
那我帮您修改了

嗯 多谢了
作者: To    时间: 2013-6-15 15:51
孙百鑫 发表于 2013-6-15 07:14
解决了之后请改分楼哦

是分类。!                                   




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2