静态代理
public interface ICar {
public void drive();
}
public class BBA implements ICar {
@Override
public void drive() {
System.out.println("I'm BBA Car");
}
}
public class CarProxy implements ICar {
private ICar icar;
public CarProxy(ICar icar) {
this.icar = icar;
}
@Override
public void drive() {
System.out.println("CarProxy start.....");
icar.drive();
System.out.println("CarProxy end.....");
}
}
测试:
public class JavaMain {
public static void main(String[] args) {
ICar car = new BBA();
ICar car_proxy = new CarProxy(car);
car_proxy.drive();
}
}
输出:
CarProxy start.....
I'm BBA Car
CarProxy end.....
总结:这种实现特意包含了目标对象(ICar),正是这种特征使得看起来像是“扩展”了目标对象的方法。假使代理对象(CarProxy)中只是简单地对drive方法做了另一种实现而没有包含目标对象的方法,也就不能算作代理模式了,所以这里的包含是关键。
缺点:代理对象必须提前写出,如果接口层发生了变化,代理对象的代码也要进行维护。