java代理模式与装饰者模式
静态代理和装饰者模式的区别:
先来看一下装饰者模式的定义:装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
总结一下采用装饰者模式是为了增强或拓展原对象的功能。
而静态代理除了能够提供功能增强外(AOP增加日志监控等,但不提供原对象本身的增强功能)还通常起到了控制访问的作用。
另外装饰者模式适用于递归组合。
看见百度静态代理和装饰者模式的区别出来前几个博客实在是无力吐槽,连装饰者模式其实就是动态代理模式都有人说的出来。。
JDK动态代理和Cglib代理的区别:
这篇文章已经通过源码将两者的原理剖析很清楚了 http://ifeve.com/jdk%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86%E4%BB%A3%E7%90%86%E4%B8%8Ecglib%E4%BB%A3%E7%90%86%E5%8E%9F%E7%90%86%E6%8E%A2%E7%A9%B6/
两者的主要区别:JDK动态代理的代理类是基于原对象的接口类生成的,而Cglib的代理类直接继承了原对象,因此Cglib可以代理没有实现任何接口的对象。
相关连接:
https://stackoverflow.com/questions/18618779/differences-between-proxy-and-decorator-pattern
<<head first 设计模式>>

浙公网安备 33010602011771号