黑马程序员技术交流社区
标题:
动态代理和io用到的装饰模式
[打印本页]
作者:
刘沙
时间:
2014-8-2 15:27
标题:
动态代理和io用到的装饰模式
动态代理:代理类要使用到被代理类中的方法
装饰模式:装饰类加强被装饰类的功能 ,在装饰类中要调用被装饰类的方法
相比之下 感觉好像 有点凌乱了 有什么核心的东西区分它们俩 大神们请赐教 :lol
作者:
☆枫の云
时间:
2014-8-2 15:50
我也一直有这个疑问,真的挺像的,都是基于已有对象功能,提供更强的功能,同求解答
作者:
fantacyleo
时间:
2014-8-2 16:36
本帖最后由 fantacyleo 于 2014-8-11 11:31 编辑
装饰是增强原来对象的功能。而代理没有增强被代理对象的功能。比如代理对象实现了Collection接口,在被代理对象的add方法调用前后计时,你可以说这是提供了额外的功能,可这和add方法提供的”增加元素到集合“的功能无关,被代理对象的add方法没有因为你计时了而在功能上有任何改变。更重要的是,你的代理对象只能调用Collection接口已定义的方法,不能调用它没有的方法。
装饰就不一样了,原先Reader对象没有缓冲区,没有一次读一行的readLine功能,而用了BufferedReader后,你就可以调用一个全新的方法readLine,从原先的读字符变成了读一行,这才叫增强了原对象的功能
作者:
掌柜的--刘饮
时间:
2014-8-2 19:29
持续关注这个帖子,一直搞不明白这两个东西,到底有什么区别,怎么用
作者:
笑轻轻
时间:
2014-8-11 11:48
学习了 谢谢分享
作者:
执笔梦
时间:
2014-8-11 23:55
学习了...
作者:
李文方
时间:
2014-8-12 08:19
fantacyleo 发表于 2014-8-2 16:36
装饰是增强原来对象的功能。而代理没有增强被代理对象的功能。比如代理对象实现了Collection接口,在被代理 ...
厉害厉害,解析得好透彻
作者:
晓风
时间:
2014-8-12 09:50
感觉是挺像的,但是装饰模式是在原有的功能上扩展了新的功能,而且装饰模式还可以有自己新的功能;动态代理:是必须要先明确了被代理类的方法之后,在调用已知的方法时,加入一些而外的功能,但并不对方法本身功能有影响。所以我觉得,动态代理是给已知的功能执行时增加而外的功能,而不是增强;装饰模式是调用被装饰类的方法,并且在方法之上对功能进行增强,比如动态代理调用方法之前和之后可以计算方法的用时,这些而外的功能。比如:Reader类没有一次读一行的方法,那就设计出了BufferedReader类,其中的功能就提供一个缓冲区,在一次读一个的基础上增加了一次读一行的功能。
作者:
wfaly
时间:
2014-8-14 15:11
xue xi le,xie xie lz!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2