问答详情
源自:2-3 了解 JDK 动态代理

动态代理和聚合代理的区别

public static void main(String[] args) {

Car car = new Car();

InvocationHandler h =new TimeHandler(car);

Class<?> cls = car.getClass();

Moveable m = (Moveable) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), h);

InvocationHandler h1 = new LogHandler(m);

Moveable m1 = (Moveable) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), h1);

m1.move();

Car2 car2 = new Car2();

InvocationHandler h2 =new TimeHandler(car2);

Class<?> cls2 = car2.getClass();

Moveable m2 = (Moveable) Proxy.newProxyInstance(cls2.getClassLoader(), cls2.getInterfaces(), h2);

InvocationHandler h3 = new LogHandler(m2);

Moveable m3 = (Moveable) Proxy.newProxyInstance(cls2.getClassLoader(), cls2.getInterfaces(), h3);

m3.move();

}

Car 的部分 实现了 日志的记录,时间的记录, 

Car2 的部分 代表其他车辆也可以使用 同样的代理类,

也就是说,我再定义一个火车也是可以用同样的日志代理和时间代理类的。

而聚合代理就不能完成了对吧。我这样理解对嘛?老师们

提问者:奋进吧_Robin 2016-08-19 14:08

个回答

  • Java全栈_济颠
    2016-08-21 22:27:01
    已采纳

    聚合代理也能完成,聚合方式产生的代理比继承方式更好!所以聚合代理一样可以用同样的日志代理和时间代理类的,具体的可以搜索相关视频哦