基类与实用类

应该首选哪两个?

有一些方法被A,B和C类调用。

这些方法是否应该封装在D类(A,B和C的基础)中?

要么

如果这些方法被封装在类U和其他类创建中,则它的对象是根据需要使用这些方法。

在什么基础上应该做出决定?

谢谢。

你应该创建一个static实用程序类。

如果实际上有意义的话,只有使用inheritance – 如果ABC实际上 D

我根据方法的作用做出决定,如果他们正在做特定于A,B和C类的事情,那么他们应该在基类中。 这有助于保持代码清洁,方法是将类相关function隐藏在系统的其他部分之外。 (当然,我假设A,B和C已经从Dinheritance,或者显然是相关的)

如果他们正在使用其他类型的东西,这不是A,B和C所做的事情,那么为了最大化重用的机会,他们应该在实用类中。

如果他们正在使用特定于其他类型的其他类型(例如,漂亮打印日期时间),请考虑为它们设置扩展方法。

除非有明显关系,否则我会偏离inheritance。 我怀疑你上面的描述并非如此。 我首选的解决方案是:

  1. 实用程序类的实例注入 A,B,C
  2. 让A,B,C实例化适当的实用程序类

注入该类的优点是您可以轻松地提供不同的实现。 这对测试特别有用。 使用静态方法的单身人士或class级出于同样的原因往往会引发问题 – 你不能轻易地覆盖或替换它们。

使用基类如果要根据基类编写一些逻辑 – 那么创建基类是有意义的。 在这种情况下,派生类应该完全可替代您的基类。 不应该有任何切换逻辑来检查派生类型并相应地采取行动。 见Liskov替代原则: http : //en.wikipedia.org/wiki/Liskov_substitution_principle

使用实用程序类某些语言具有不支持多重inheritance的限制。 如果您已经有了一个有意义的基类,那么您需要去实用程序类。 此外,当您使用inheritance时,您正在创建从dervied类到基类之间的紧密耦合。

如果派生类自然可以替代它的基类,我会选择基类。 如果目的只是在类之间共享一些可重用的代码,那么使用实用程序类更有意义。