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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴乾刚 中级黑马   /  2013-3-13 16:28  /  1306 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戴乾刚 于 2013-3-13 20:00 编辑

什么时候用继承,什么时候用装设设计模式?有点迷糊、、最好能举个例子

点评

这种概念性的问题,你可以多看看毕老师的视频  发表于 2013-3-13 18:25

3 个回复

正序浏览
所谓装饰设计模式,就是对已有对象进行功能增强。
毕老师的视频第19天06讲,讲的很清楚。
可以定义一个类,把已有对象传入,基于已有功能并提供加强功能,自定义类就称为装饰类。
例如:java.io包中有一个Reader类,类中提供了read()读取一个字符的方法,
但是每次读取一个字符不太方便,于是出现了BufferedReaderl类,此类是Reader的增强类,有一个构造方法是BufferedReader(Reader in);接受了Reader作为参数,增加了readLine()方法读取一行。这就是装饰设计模式
装饰模式要比继承灵活,避免了继承体系的臃肿,而且降低了类之间的关系。
当类与类之间有明显共性特性,又有自己的特有方法时就用继承。
而当类中的方法不够用时,为了增强类中的方法,这时候就建立一个新类传入已知类对已有方法进行增强,用到装饰模式。如果此时用继承的化,也可以实现,但是继承多了的化就继承体系就比较臃肿。没有装饰模式优化。

评分

参与人数 1黑马币 +12 收起 理由
黄玉昆 + 12 赞一个!

查看全部评分

回复 使用道具 举报

装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。具体被装饰者和抽象装饰类都继承于抽象被装饰者类,继承的是类型,而不是行为。行为来自装饰者和基础组件,或与其他装饰者之间的组合关系。装饰者通常是用其他类似于工厂或生成器这样的模式创建的。

1)继承属于扩展形式之一,但不见得是达到弹性设计的最佳方式。

2)在设计中,应该允许行为可以被扩展,而无须修改现有的代码。

3)组合和委托可用于在运行时动态地加上新的行为。

4)除了继承,装饰者模式也可以让我们扩展行为。

5)装饰者模式意味着一群装饰者类,这些类用来包装具体组件。

6)装饰者类反映出被装饰的组件类型(事实上,他们具有相同的类型,都经过接口或继承实现)。

7)装饰者可以在被装饰者的行为前面与/或后面加上自己的行为,甚至将被装饰者的行为整个取代掉,而达到特定的目的。

8)可以用无数个装饰者包装一个组件。

9)装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型。

10)装饰者会导致设计中出现许多小对象,如果过度使用,会让程序变得很复杂。

评分

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

查看全部评分

回复 使用道具 举报
装饰模式比继承更灵活,避免了继承体系的臃肿,降低了类与类之间的关系。装饰类就是在之前对象的基础上增加更适合自己使用的功能。简单概括就是装饰类能够简化地增强对象的功能
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马