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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董波 中级黑马   /  2013-4-25 18:04  /  2208 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 董波 于 2013-5-7 08:00 编辑

刚看了毕老师讲解装饰设计模式的视频,还是不太理解为什么装饰类与被装饰类要位于同一体系中?感觉不在同一体系中也不会有什么影响啊,求高手指教。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

13 个回复

倒序浏览
标记 等高手来 {:soso_e120:}
回复 使用道具 举报
我的感觉是,装饰类是后来写的,为了扩展功能的作用。肯定是在原有的基础上写了。查阅的时候也方便,将来再次提高性能的时候也比较方便

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果不使用的话,如果想实现一个功能,就需要通过继承自其它类,增加了复杂度。
回复 使用道具 举报
也不是很清楚,个人只是觉得,继承的话,父类的所有方法都搞过来,比较庞大,而装饰的话对感兴趣的方法进行升级,没必要对其所有的方法都进行操作。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
pthuakai 发表于 2013-4-27 14:01
我的感觉是,装饰类是后来写的,为了扩展功能的作用。肯定是在原有的基础上写了。查阅的时候也方便,将来再 ...

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

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

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

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
装饰模式,实现最好的两个是java swing 与java io ,这个你可以看一下,给outputStream 装饰上bufferedStream,只是让这个流有了缓存的能力,装饰就是这样,让对象叠加,可以更好的拓展。
回复 使用道具 举报
本帖最后由 符立波 于 2013-5-1 07:10 编辑

动态地给一个对象添加一些额外的职责, 就增加功能来说,Decorator模式相比生成子类更为灵活
回复 使用道具 举报
符立波 发表于 2013-4-30 10:33
呵呵......

额,童鞋,可不可以针对楼主的问题回帖啊,谢谢
回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢
回复 使用道具 举报
最重要的是你要弄明白装饰和继承的区别
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马