【发布时间】:2014-09-04 11:28:03
【问题描述】:
我有以下设计:
- 我创建了一个包含属性的类(就像一个非常大的数组)
- 稍后当我解析文件时,我希望根据上面的属性内容添加一些“额外参数/功能”。
什么是最好的解决方案?
- 派生一个具有额外参数/功能的类(问题:需要将大数组复制到新类中)
- 装饰器模式?还是装饰器不适合添加额外的属性/功能?
- 战略模式?因为我需要可能无法使用的属性。
- 另一种解决方案?
【问题讨论】:
-
为什么派生类需要父类的副本?继承的意义在于您不需要复制代码。您也可以尝试组合而不是继承......如果在概念上适用于正在建模的数据,则新类可以包含现有类的实例而不是成为它的实例。 (我猜这几乎是装饰器,取决于你如何建模。)我不确定策略在这里如何应用,因为它是针对算法而不是数据模型 i>,除非您对对象的描述不完整...
-
@David 原因是在我可以检查是否需要派生类(实例)之前,已经创建了原始(父)类。但是你关于装饰器部分的说法是一个好点,我想我就是这样使用的(或者试试它是如何工作的)。
-
看起来你想要“基于上面属性的内容”来组合你的类,装饰是允许这种动态组合的解决方案。继承意味着您必须选择适当的派生而不知道您实际需要哪个派生。
-
啊,在这种情况下,如果不知道更多,听起来绝对像 Decorator 是要走的路。新对象只是简单地包装了旧对象并将一些功能委托给它。您想在多大程度上掩盖该授权取决于您。这也非常符合偏好组合而不是继承的概念,我相信这在《四人帮》一书中得到了建议。
-
@David 谢谢,看起来装饰器模式确实是最好的...如果您可以将其添加为答案,我可以承认这一点(如果您愿意)。
标签: c# design-patterns decorator strategy-pattern