扩展一个类:在类中执行此操作还是使用观察者?

时间:2010-09-07 10:08:05

标签: design-patterns language-agnostic oop observer-pattern

我需要扩展一个类(在C ++中,但我认为这个问题与语言无关),其功能可以通过两种不同的方式实现:

  • 只需将逻辑添加到类本身
  • 通过向类中添加观察者逻辑并将逻辑放在类
  • 之外的观察者中

两种选择都有优点和缺点:

  • 因为代码也可能用于其他类,所以在观察者中添加逻辑似乎更合乎逻辑。然后,未来的课程只需要支持观察员。
  • 另一方面,
  • 很难预见观察者对计算密集型代码的影响。稍后在代码中添加的新观察者可能会对计算密集型代码产生负面影响。

有没有人明确规定何时在课堂上添加新功能,而不是将其放在课堂外的观察者中?

2 个答案:

答案 0 :(得分:1)

我认为在这种情况下(和很多人一样) - 这取决于。这是一个在你正在解决的问题的背景下知道什么是合适的情况。

从纯粹的意义上讲,你可能会认为Observer模型在未来可能更容易扩展和操作。然而,如果实际上必须在合理的时间范围内工作,这种纯粹的观点很少考虑到实际的现实。

很可能观察者模型对你很好。但逻辑时间是否批评,是否可能很昂贵?如果这些是您的实施中重要的事情,那么您必须记录它们。

不幸的是,只有你可以告诉 - 虽然它可能在一种情况下运作良好,但概念上类似的情况可能有不同的约束,并且使用相同的设计表现不佳(或完全不切实际)。

所以,回答你的问题:不 - 我真的不认为任何人都可以说有明确的规则。

人们可能有偏好,而且他们更多或大部分都适用。但我怀疑它们是否会普及。

你将不得不考虑它 - 但这就是让它变得有趣的原因!

答案 1 :(得分:1)

扩展功能的一种常用方法是Extension Interface pattern,如POSA1中所述。

您可能考虑的另一种模式是Proxy pattern。如果逻辑是离散,则可以将代理对象链接到彼此,并通过接口单独引用它们。这应该允许您将逻辑很好地分布在几个独立且可互换的对象上。

鉴于我对你的情况了解不多,我对设计提出更多建议有点困难。但我希望这会有所帮助。