【问题标题】:Design pattern usage设计模式使用
【发布时间】:2014-09-04 11:28:03
【问题描述】:

我有以下设计:

  • 我创建了一个包含属性的类(就像一个非常大的数组)
  • 稍后当我解析文件时,我希望根据上面的属性内容添加一些“额外参数/功能”。

什么是最好的解决方案?

  1. 派生一个具有额外参数/功能的类(问题:需要将大数组复制到新类中)
  2. 装饰器模式?还是装饰器不适合添加额外的属性/功能?
  3. 战略模式?因为我需要可能无法使用的属性。
  4. 另一种解决方案?

【问题讨论】:

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

标签: c# design-patterns decorator strategy-pattern


【解决方案1】:

您可以为AdditionalValues 创建一个类,将一个实例添加到您的数组中,当您需要新值时,您可以将它们设置为给定的对象。

【讨论】:

  • 感谢您的回答,但我希望这两个(普通和“附加”对象)都可以使用类属性。这可能看起来最像@David 已经解释过的装饰器模式(仍然给出 +1 以获得可能的答案)。
  • 你有一个“正常”的对象,里面有一个数组。数组包含了附加对象,所以可以通过它的数组到达普通对象的附加对象。
  • 我想我不清楚......数组包含字节,附加对象应该是具有自己的方法和属性的单独对象。
  • “在 OO 中,让类具有未使用但仍然存在的属性/函数不是一个好主意。”您可以在需要时使用附加对象并将 null 作为默认值。实现另一个具有附加成员的类并来回转换您的对象是太多的障碍。您将使用太多资源来遵守抽象的 OOP 规则。我相信你在实践中会牺牲太多。
  • 是的,装饰器方案也是可行的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 2011-01-02
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多