代理设计模式的核心思想就是创建一个目标类的代理对象,这个对象和目标对象一样实现了同一个接口,并且代理对象是持有这个目标对象的引用,可以在执行目标对象的方法前后对其进行控制。spring的aop就是一个典型的代理模式。
下面我们通过一段简单的代码来理解一下代理模式
首先定义一个接口:
public interface SuperStar {
public void action();
}
定义一个接口的实现类,这个实现类就是我们的目标类:
public class RealStar implements SuperStar{
@Override
public void action() {
System.out.println("大明星要开始表演了!!!");
}
}
定义另一个接口实现类,这个类就是代理类,代理类持有目标对象:
public class Broker implements SuperStar{
private RealStar realStar;
public Broker(){
this.realStar = new RealStar();
}
@Override
public void action() {
askPrice();
realStar.action();
handleEnd();
}
private void askPrice(){
System.out.println("经纪人开始谈出场费");
}
private void handleEnd(){
System.out.println("经纪人开始处理收尾工作");
}
}
测试代码如下:
public class CustomerTest {
public static void main(String[] args) {
Broker broker = new Broker();
broker.action();
}
}
执行测试代码,得到如下结果:
经纪人开始谈出场费
大明星要开始表演了!!!
经纪人开始处理收尾工作
对于消费者来讲,其实不知道有目标类的存在,因为我们只是和代理类打交道,但是action方法却是由目标类进行执行的,只不过是由代理类去调用的。如果经纪人价格没谈好,那么目标对象的方法也不会执行了,对目标方法进行了控制。