黑马程序员技术交流社区

标题: 代理模式的一些总结 [打印本页]

作者: 刘雷冲    时间: 2012-3-10 18:48
标题: 代理模式的一些总结
本帖最后由 刘雷冲 于 2012-3-10 18:58 编辑

代理模式是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,
并由代理对象控制对原对象的引用

代理分类:
1、静态代理
    1>需要建立大量的代理类
    2>重复的代码会出现在各个角落(违背的原则:重复代码最好不要出现多次)

2、动态代理
    JDK动态代理只能实现了接口的类进行代理,采用了JDK动态代理必须实现
    InvocationHander接口,采用Proxy类创建相应的代理类,参见LogHander.java
    采用JDK动态代理可以对目录类(UserManagerImp)方法进行增强
  1. import java.lang.reflect.InvocationHandler;
  2. import java.lang.reflect.Method;
  3. import java.lang.reflect.Proxy;

  4. public class LogHander implements InvocationHandler {

  5.         private  Object object;
  6.        
  7.         public Object newProxyInstance(Object object) {
  8.                 this.object = object;
  9.                
  10.                 return Proxy.newProxyInstance(object.getClass().getClassLoader(),
  11.                                 object.getClass().getInterfaces(), this );
  12.         }
  13.        
  14.         public Object invoke(Object proxy, Method method, Object[] args)
  15.                         throws Throwable {
  16.                
  17.                 System.out.println("start------------>>>>>>");
  18.                 Object obj = null;
  19.                 try {
  20.                         obj = method.invoke(object, args);
  21.                         System.out.println("chenggong");
  22.                 } catch(Exception e) {
  23.                         e.printStackTrace();
  24.                 }
  25.                 /*try {
  26.                        
  27.                         System.out.println("name=----" + method.getName());
  28.                         for(int i=0; i<args.length; i++) {
  29.                                 System.out.println("参数 " + args[i]);
  30.                                 System.out.println("大幅度");
  31.                         }
  32.                 } catch(Exception e) {
  33.                         e.printStackTrace();
  34.                         System.out.println("error---------");
  35.                 }*/
  36.        
  37.                
  38.                 return obj;
  39.         }
  40.        
  41.        
  42.        
  43. }
复制代码
Proxy.zip (1.97 KB, 下载次数: 73)




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