静态代理:使用聚合比继承灵活方便得多,任何实现同一接口的的对象都可以被代理作为被代理对象。
Moveable接口里有个move()方法
package com.proxy;
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();
}
}
}
实现的代理类:
package com.proxy;
public class TankTimeProxy implements com.proxy.Moveable{
public TankTimeProxy(Moveable t) {
super();
this.t = t;
}
Moveable t;//聚合
@Override
public void move() {
long start = System.currentTimeMillis();
t.move();
long end = System.currentTimeMillis();
System.out.println("Time:" + (end-start));
}
}
package com.proxy; import java.io.IOException; public class Client { public static void main(String[] args) throws IOException{ Tank t = new Tank(); //Moveable m = (Moveable)Proxy.newProxyInstance(Moveable.class); TankTimeProxy ttp = new TankTimeProxy(t); Moveable m = ttp; m.move(); } }结果:
Tank moving...
Time:4547