黑马程序员技术交流社区
标题:
关于装饰设计模式的问题
[打印本页]
作者:
唐巍
时间:
2012-3-25 16:10
标题:
关于装饰设计模式的问题
装饰类就是基于被装饰对象的功能,提供更强的功能。那么用继承的方式也可以基于父类的方法,提供新的方法。那么装饰和继承到底有什么不同?
作者:
翟友伟
时间:
2012-3-25 16:22
本帖最后由 翟友伟 于 2012-3-25 16:23 编辑
装饰模式比继承模式更灵活,避免了继承体系的臃肿,降低了类与类之间的关系。
装饰类因为是增强已有对象,具备的功能和已有的是相同的。只不过是提过了更强的功能,所以装饰类和被装饰类都属于一个共同的体系。
BufferedReader 就是一个装饰类,提过了更高效的功能
Java只支持单继承,不支持多继承
作者:
陈从宾
时间:
2012-3-25 16:45
当我们想对一个对象增加功能时一般的做法是对产生该对象的类进行功能扩展,利用扩展之后的类进行实例化进而达到自己的目的。而装饰模式是动态的给对象增加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活(这种灵活性主要体现在客户端)。
装饰模式的一般做法是:第一步,创建一个基类并基于此类创建两个子类:装饰对象类和装饰抽象类,装饰对象类主要用来实例化被装饰的对象(其自身可以包含一些特定功能),装饰抽象类用来产生包含扩展功能的子类。第二步,组织需要添加的功能使其包含在装饰抽象类的子类中。第三步,在客户端利用多态性为装饰对象进行动态添加新功能。(在整个过程中语言的继承和多态的特性是前提保证)
装饰模式的好处是:对于一个类而讲,一些行为功能只有在特殊情况下才能够表现出来,如果为添加这些特殊功能对原有类进行添加字段和功能函数代码只会增加原有类的复杂性,而装饰模式把每个要装饰的功能封装在单独的类中并让这个类包装它所要装饰的对象(这里如何进行包装是需要深入研究的),当需要特殊行为时客户代码就可以在运行时根据需要有选择的,按顺序的为对象添加新功能。这样既可以提高客户端的灵活性又将起装饰作用的功能从原有类中移除,简化了类的设计(单一职责原则),有效地将类的核心职责与装饰功能区分开。
作者:
贠(yun)靖
时间:
2012-3-25 16:45
装饰设计模式比继承扩展性好, 装饰类和被装饰类都是在一个体系中,也就是说他们有一个共同的父类
所以想在这个体系中添加其他的类的话 直接继承父类 而装饰类可以直接装饰这个新增加的类
如果是继承的话 你每次在这个体系中增加一个新的类 都要给新添加的这个类继承一个子类 来提高它的功能 那么如果
在这个体系中添加10个类 就有十个相对应的子类 这样显然比较麻烦
而装饰类只需要一个就可以了 那么你添加100个 只要把引用通过构造函数传进去就可以了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2