技术开发 频道

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

  【IT168 技术】类定义:

  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);
        }
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();
}
}
}
0
相关文章