background image

JAVA 设计模式:JAVA 代理模式之动态代理

 1、被代理接口和实现类
  Tank 类实现了 Moveable 接口,能够 move()
  package com.zec.disignmode;
  public interface Moveable {
  public void move();
  }
  package com.zec.disignmode;
  import java.util.Random;
  public class Tank implements Moveable{
  @Override
  public void move() {
  System.out.println("Tank moving....");
  try {
  Thread.sleep(new Random().nextInt(10000));
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  }
  }
  2、代理加工接口和实现类
    TimeHandler 类 实 现 了 InvocationHandler 接 口 , 能 够 invoke(Object 

object,Method m)在 object 的 m 方法前后加上自己记录时间的逻辑,并不是代理类,
只是提供了对被代理类的加工逻辑。

package com.zec.disignmode;
import java.lang.reflect.Method;
public interface InvocationHandler {
    public void invoke(Object o,Method m);
}
package com.zec.disignmode;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TimeHandler implements InvocationHandler{
    @Override
    public void invoke(Object object, Method m) {
        System.out.println("Time Before "+m.getName());
        try {
            m.invoke(object);