黑马程序员技术交流社区

标题: 关于装饰设计模式?? [打印本页]

作者: 董波    时间: 2013-4-25 18:04
标题: 关于装饰设计模式??
本帖最后由 董波 于 2013-5-7 08:00 编辑

刚看了毕老师讲解装饰设计模式的视频,还是不太理解为什么装饰类与被装饰类要位于同一体系中?感觉不在同一体系中也不会有什么影响啊,求高手指教。
作者: HM朱蛟    时间: 2013-4-27 00:17
标记 等高手来 {:soso_e120:}
作者: pthuakai    时间: 2013-4-27 14:01
我的感觉是,装饰类是后来写的,为了扩展功能的作用。肯定是在原有的基础上写了。查阅的时候也方便,将来再次提高性能的时候也比较方便
作者: 李慧声    时间: 2013-4-27 18:22
也不是很清楚,个人只是觉得,继承的话,父类的所有方法都搞过来,比较庞大,而装饰的话对感兴趣的方法进行升级,没必要对其所有的方法都进行操作。

作者: 董波    时间: 2013-4-28 11:33
pthuakai 发表于 2013-4-27 14:01
我的感觉是,装饰类是后来写的,为了扩展功能的作用。肯定是在原有的基础上写了。查阅的时候也方便,将来再 ...

只是为了查阅的时候方便吗??还有没有其他原因??
作者: 董波    时间: 2013-4-28 11:35
李慧声 发表于 2013-4-27 18:22
也不是很清楚,个人只是觉得,继承的话,父类的所有方法都搞过来,比较庞大,而装饰的话对感兴趣的方法进行 ...

你说的这点我理解,这就是装饰模式存在的原因嘛。
我要问的是创建的装饰类为什么要跟被装饰类位于同一体系中,兄弟误会我的意思了
作者: pthuakai    时间: 2013-4-28 14:59
我看视频,得到的感觉就是这是代码编写习惯问题。这样条理比较清楚
作者: Sword    时间: 2013-4-30 01:16
装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
装饰模式的特点;
(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。
(2) 装饰对象包含一个真实对象的索引(reference)
(3) 装饰对象接受所有的来自客户端的请求。它把这些请求转发给真实的对象。
(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。

基于以上几点可以看出,装饰对象和真实对象有着密不可分的关系,所以装饰类与被装饰类要位于同一体系中很有必要

作者: 刘沛霞    时间: 2013-4-30 10:13
装饰模式,实现最好的两个是java swing 与java io ,这个你可以看一下,给outputStream 装饰上bufferedStream,只是让这个流有了缓存的能力,装饰就是这样,让对象叠加,可以更好的拓展。
作者: 符立波    时间: 2013-4-30 10:33
本帖最后由 符立波 于 2013-5-1 07:10 编辑

动态地给一个对象添加一些额外的职责, 就增加功能来说,Decorator模式相比生成子类更为灵活
作者: 黄玉昆    时间: 2013-4-30 23:24
符立波 发表于 2013-4-30 10:33
呵呵......

额,童鞋,可不可以针对楼主的问题回帖啊,谢谢
作者: 黄玉昆    时间: 2013-5-6 23:01
如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢
作者: 郭伟杰    时间: 2013-6-25 18:04
最重要的是你要弄明白装饰和继承的区别




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2