A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘沙 中级黑马   /  2014-8-2 15:27  /  1642 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

动态代理:代理类要使用到被代理类中的方法
装饰模式:装饰类加强被装饰类的功能 ,在装饰类中要调用被装饰类的方法
相比之下 感觉好像 有点凌乱了   有什么核心的东西区分它们俩  大神们请赐教 :lol

9 个回复

倒序浏览
我也一直有这个疑问,真的挺像的,都是基于已有对象功能,提供更强的功能,同求解答
回复 使用道具 举报
本帖最后由 fantacyleo 于 2014-8-11 11:31 编辑

装饰是增强原来对象的功能。而代理没有增强被代理对象的功能。比如代理对象实现了Collection接口,在被代理对象的add方法调用前后计时,你可以说这是提供了额外的功能,可这和add方法提供的”增加元素到集合“的功能无关,被代理对象的add方法没有因为你计时了而在功能上有任何改变。更重要的是,你的代理对象只能调用Collection接口已定义的方法,不能调用它没有的方法。

装饰就不一样了,原先Reader对象没有缓冲区,没有一次读一行的readLine功能,而用了BufferedReader后,你就可以调用一个全新的方法readLine,从原先的读字符变成了读一行,这才叫增强了原对象的功能

点评

不错 听你这么一分析 确实是这么回事 从你的分析来看 我感觉 核心问题是要弄清楚什么是增强功能 谢谢哈  发表于 2014-8-2 21:05
回复 使用道具 举报
持续关注这个帖子,一直搞不明白这两个东西,到底有什么区别,怎么用
回复 使用道具 举报
学习了 谢谢分享
回复 使用道具 举报
学习了...
回复 使用道具 举报
fantacyleo 发表于 2014-8-2 16:36
装饰是增强原来对象的功能。而代理没有增强被代理对象的功能。比如代理对象实现了Collection接口,在被代理 ...

厉害厉害,解析得好透彻
回复 使用道具 举报
晓风 中级黑马 2014-8-12 09:50:07
8#
感觉是挺像的,但是装饰模式是在原有的功能上扩展了新的功能,而且装饰模式还可以有自己新的功能;动态代理:是必须要先明确了被代理类的方法之后,在调用已知的方法时,加入一些而外的功能,但并不对方法本身功能有影响。所以我觉得,动态代理是给已知的功能执行时增加而外的功能,而不是增强;装饰模式是调用被装饰类的方法,并且在方法之上对功能进行增强,比如动态代理调用方法之前和之后可以计算方法的用时,这些而外的功能。比如:Reader类没有一次读一行的方法,那就设计出了BufferedReader类,其中的功能就提供一个缓冲区,在一次读一个的基础上增加了一次读一行的功能。
回复 使用道具 举报
wfaly 中级黑马 2014-8-14 15:11:07
9#
xue xi le,xie xie lz!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马