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);