定义一个接口:
public class Tank implements Moveable {
@Override
public void move() {
try {
Thread.sleep(new Random().nextInt(10000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
被代理的接口一:
public interface Moveable {
public void move();
}
被代理接口二:
public interface TankLogger {
public void startLogger();
public void endLogger();
}
代理一:
public class TankLoggerProxy implements Moveable{
Moveable tank;
public TankLoggerProxy(Moveable moveable) {
super();
this.tank = moveable;
}
public void endLogger(){
}
@Override
public void move() {
System.out.println("logger tank start move");
this.tank.move();
System.out.println("logger tank end move");
}
}
代理二:
public class TankTimeProxy implements Moveable{
Moveable tank;
public TankTimeProxy(Moveable tank) {
super();
this.tank = tank;
}
public void move()
{
long start = System.currentTimeMillis();
System.out.println("starttime:"+start);
this.tank.move();
long end = System.currentTimeMillis();
System.out.println("endtime:"+end);
}
}
主函数:
public class TestMain {
public static void main(String[] args) {
Tank tank = new Tank();
Moveable tankTimeProxy = new TankTimeProxy(tank);
Moveable tankLoggerProxy = new TankLoggerProxy(tankTimeProxy);
Moveable m = tankLoggerProxy;
tankLoggerProxy.move();
}
}