问答详情
源自:2-2 聚合比继承更适合代理模式

静态代理深层次底层问题

为什么cartime跟carlog实现move接口后,就能够做到对car的代理?有什么深层次的原理吗?

提问者:杜牧之 2017-03-08 17:34

个回答

  • 我是你流浪过的地方
    2017-03-08 22:49:17

    1. 测试类代码:

    2. public class Main {
      
      public static void main(String[] args) {
      Car car = new Car();
      CarTimeProxy ctp = new CarTimeProxy(car);
      CarLogProxy  clp = new CarLogProxy(ctp);
      clp.move();
      }
      }
    3. cartime和carlog是两个代理类,他们分别为car代理了记录时间和日志的功能

    4. cartime和carlog这两个代理类都实现了Moveable接口,同时要重写move方法

    5. car汽车类也实现了Moveable接口的move方法,car类中的move方法只实现了汽车行驶的功能,并不实现记录时间和日志的功能。

    6. 重点来了,我们在main方法中调用move方法的时候其实是嵌套调用了,一层层的来调用的,main方法中clp先调用move方法时,先是执行自己实现的move方法里的操作,然后执行ctp的move方法里的操作,最后执行car对象本身的行驶操作。