我在网上查找有关装饰器模式的资料时,发现所有的材料都说装饰器模式“可以动态地给对象添加额外的职责,就象在墙上刷油漆。”我有些不解:所谓的“动态”是什么意思,用继承难道就不“动态”了?
还有,在谈到装饰器模式与继承相比的优点时,人们总是说它:
1、可以在不改变原有对象的情况下为对象添加更多动能
2、可以保证了和被装饰对象的接口不变
3、灵活地扩充新功能
4、多个装饰器可以根据不同的需要,组合使用
我还是不解,继承不也是“可以在不改变原有对象的情况下为对象添加更多动能”吗?
还有,“可以保证了和被装饰对象的接口不变”是什么意思?
装饰器的“灵活”性又体现在哪里?
总之,我就是不太明白装饰器模式与继承相比优势到底在哪里?
还有,在谈到装饰器模式与继承相比的优点时,人们总是说它:
1、可以在不改变原有对象的情况下为对象添加更多动能
2、可以保证了和被装饰对象的接口不变
3、灵活地扩充新功能
4、多个装饰器可以根据不同的需要,组合使用
我还是不解,继承不也是“可以在不改变原有对象的情况下为对象添加更多动能”吗?
还有,“可以保证了和被装饰对象的接口不变”是什么意思?
装饰器的“灵活”性又体现在哪里?
总之,我就是不太明白装饰器模式与继承相比优势到底在哪里?
解决方案 »
- WCF 的UdpDiscoveryEndpoint老报异常,急~~~~~~~~~~~~~~~
- [有偿]求DataGridView的打印控件。
- 怎么进行文件上传?
- 急!!!!该进程无法访问文件 因为该文件正由另一进程使用
- 是vc#太笨还是我的操作有问题,我改了数据表结构之后为什么在vc#里面刷新了数据库之后数据源里面的表没变化?!
- c#如何调用delphi写的dll中的函数!!
- 在WebForm中如何点击一个Flash动画实现页面重定向?
- datagrid 不是很支持win98的问题
- 大家觉得《C# Primer Plus中文版》怎样?
- ?我想编基于COM的组件,但我不会ATL,COM理论,C#是我最合适的选者吗?
- Timer控件Timer组件有什么不同呀
- 在vs2005中,怎样才能禁止 textbox 中的鼠标右键粘贴?
你把你写好的类给别人用
或者以后自己复用
所有的继承则都是死的
而使用装饰则是在不改变任何代码的前提下改变行为模式
而组合是动态的,更加灵活