静态代理模式,完全就是由我们自己实现的代理方法,一般是用在方法调用前后需要做一些其他操作的情况下;
直接上代码:
1.定义代理接口
public interface MoveAble {
public void move();
}
其实就是定义一个普通的接口而已。
2.实现代理功能
public class CarProxy implements MoveAble {
private MoveAble car;
public CarProxy(MoveAble car) {
super();
this.car = car;
}
@Override
public void move() {
long startTime = System.currentTimeMillis();
try {
Thread.sleep(new Random().nextInt(1000));
car.move();
} catch (InterruptedException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("汽车运行了" + (endTime - startTime) + "秒...");
}
}
这一步骤最重要的就是带参的构造方法了,
public CarProxy(MoveAble car) {
super();
this.car = car;
}
其实真正实现逻辑的,还是我们传进来的实际对象实例,只是在调用真正的对象之前或者之后,做一些其他操作。
3.使用我们的静态代理
@Test
public void testMove() {
MoveAble car = new Car();
CarProxy cp = new CarProxy(car);
cp.move();
}
把我们实际的实现类,以参数方法传给静态代理类的构造方法即可。
总结:静态代理基于统一的接口编程,代理类也实现相同的接口,并通过在代理类中注入(一般通过构造函数)一个真实的接口实现,这样,在调用代理类实现的接口方法时,方法内部其实是用真正的实现类去调用相应的方法。