代理模式
代理模式是一种结构型模式(旨在通过改变代码结构来达到解耦的目的)
代理模式是最常用的模式之一,用一个代理来隐藏具体实现类的实现细节,通常还用于真实的实现的前后添加一部分逻辑。
public interface CarService{
Car makeMazda();
Car makeBWM();
}
public class CarServiceImpl implements CarService{
public Car makeMazda(){
Car car = new MazdaCar();
car.set....
return car;
}
public Car makeBWM(){
Car car = new BMWCar();
car.set....
return car;
}
}
public Car CarServicePeoxy implements CarService{
private CarService carServiceImpl = new CarServiceImpl();
public Car makeMazda(){
//---执行被代理的方法之前可以做一点事
。。。。。。
//执行被代理的真正方法
Car car = carServiceImpl.makeMazda();
//----执行被代理的方法之后可以做一点事
return car
}
public Car makeBWM(){
//---执行被代理的方法之前可以做一点事
。。。。。。
//执行被代理的真正方法
Car car = carServiceImpl.makeBWM();
//----执行被代理的方法之后可以做一点事
return car;
}
}
当我们调用的时候直接调用proxy的方法就行了,我们无需再去关注真正的实现细节。说白了,就是做“方法的包装”和“方法的增强”。面向切面编程的时候就是一个动态代理的过程。再spring中,我们自己不定义代理类名单时spring会帮我们动态生成代理,把我们定义再@Before、@After、@Around中的代码逻辑动态添加到代理中。