静态代理

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方法做了另一种实现而没有包含目标对象的方法,也就不能算作代理模式了,所以这里的包含是关键。

缺点:代理对象必须提前写出,如果接口层发生了变化,代理对象的代码也要进行维护。

results matching ""

    No results matching ""