为什么cartime跟carlog实现move接口后,就能够做到对car的代理?有什么深层次的原理吗?
测试类代码:
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(); } }
cartime和carlog是两个代理类,他们分别为car代理了记录时间和日志的功能
cartime和carlog这两个代理类都实现了Moveable接口,同时要重写move方法
car汽车类也实现了Moveable接口的move方法,car类中的move方法只实现了汽车行驶的功能,并不实现记录时间和日志的功能。
重点来了,我们在main方法中调用move方法的时候其实是嵌套调用了,一层层的来调用的,main方法中clp先调用move方法时,先是执行自己实现的move方法里的操作,然后执行ctp的move方法里的操作,最后执行car对象本身的行驶操作。