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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 勾尧 中级黑马   /  2012-12-10 23:27  /  1884 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 勾尧 于 2012-12-10 23:52 编辑

今天看到有关装饰类的内容,我觉得装饰类是继承的一种
装饰类是一个功能型的子类,主要在方法;而其他子类则主要关注在构造函数和成员
不知这样理解对不对,总觉得有点别扭,求助

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

8 个回复

倒序浏览
装饰是构造函数参数传递进行增强,可以定义类,将已有对象传入,基于已有的功能,提供加强功能,所以装饰类和被装饰类通常是都属于一个体系中的,
如果为了某个功能而产生子类(继承)那么那个体系是非常臃肿的,所以装饰模式比继承要灵活。避免了继承体系臃肿。
而且降低了类于类之间的关系,装饰类增强已有对象,具备的功能和已有的是相同的,而且提供了更强功能。

毕爷讲过的哇...

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
说明:
装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

装饰模式的特点;
(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。
(2) 装饰对象包含一个真实对象的索引(reference)
(3) 装饰对象接受所有的来自客户端的请求。它把这些请求转发给真实的对象。
(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。

下表格列举了装饰模式和继承的不同:

装饰模式 VS 继承
装饰模式 继承
用来扩展特定对象的功能 用来扩展一类对象的功能
不需要子类 需要子类
动态地 静态地
运行时分配职责 编译时分派职责
防止由于子类而导致的复杂和混乱 导致很多子类产生,在一些场合,报漏类的层次
更多的灵活性 缺乏灵活性
对于一个给定的对象,同时可能有不同的装饰对象,客户端可以通过它的需要选择合适的装饰对象发送消息。 对于所有可能的联合,客户期望
很容易增加任何的 困难

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
黑马黄涛 发表于 2012-12-10 23:34
装饰是构造函数参数传递进行增强,可以定义类,将已有对象传入,基于已有的功能,提供加强功能,所以装饰类 ...

是不是说,装饰和继承是一个层面的,其中装饰更注重扩展,而继承更注重独特,这样想对么
回复 使用道具 举报
装饰是设计模式,是一种思想,跟继承是完完全全两个概念啊...
你说的这个问题我...呵呵,真是佩服 没想过...o(︶︿︶)o 知道去区分他们,然后知道怎么用....
避免了继承体系臃肿,关键是这句话...而且装饰可以在原有的基础上增前功能,不用再修改程序的其他代码了....
我记得毕爷说过,好像物理继承这回事,所以继承不是乱继承的,如果为了实现摸个功能而去继承,不但写成伪类,更加消耗资源...

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
cehkongfu 发表于 2012-12-10 23:36
说明:
装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包 ...

有点明白了,thanks
回复 使用道具 举报
勾尧 中级黑马 2012-12-10 23:50:25
7#
黑马黄涛 发表于 2012-12-10 23:49
装饰是设计模式,是一种思想,跟继承是完完全全两个概念啊...
你说的这个问题我...呵呵,真是佩服 没想过...o( ...

哦了,谢谢啊
回复 使用道具 举报
呵呵...客气 不过确实很佩服你啊...抛出这么多疑问,我的理解能力挺强的...一下就理解了,知道去怎么用,可这些问题可真是没想过...
回复 使用道具 举报
飘过....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马