background image

 
} catch (Exception e) {

            e.printStackTrace();
        } 
        System.out.println("Time After  "+m.getName());
    }
}
  3、测试类
package com.zec.disignmode;
public class Client {
public static void main(String[] args) {
Moveable m = new Tank(); 
LogHandler h = new LogHandler();
try {
Moveable moveable = (Moveable) Proxy.newInstance(Moveable.class, h);
moveable.move();
} catch (Exception e) {
e.printStackTrace();
}
}
}

  4、生成动态代理类的 Proxy 静态类
  代理产生器,根据传进来的参数 Class Intface 和 InvocationHandler h,产

生动态代理类;从而使 intface 中的所有方法都加上了 h 中 invoke 方法的自定义逻辑;为
了便于代理类的组合和扩展,代理类也会实现 Intface 接口,最终返回一个代理类对象。

package com.zec.disignmode;
import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import javax.tools.JavaCompiler.CompilationTask;
public class Proxy {
public   static   Object   newInstance(Class   intface,InvocationHandler   h) 

throws Exception {

/*Generate the source code*/
String rt = "\r\n";
String methodStr = "";