每次要引入新功能时都避免使用新的 class?

avoid a new class every time you want to introduce new functionality?

在一个庞大复杂的应用程序中,我想知道是否可以不引入 class 只是为了实现一个简单的新功能。

例如 Class C 和 D 继承自 A(还有许多其他 class 也继承自 A)。

如果我们想为 C 和 D 引入新的共享功能,我们可以:

1) 在父 class A 和子 classes C 之间引入一个新的 class B(并在此 class 中实现共享功能)和 D 所以 B 继承自 A 而 C 和 D 继承自 B

2) 在父 class A 中添加功能并添加一个标志以仅当子类型为 B 或 C 时才使用此功能(并确保这样我们不会破坏某些东西到从 A)

继承的其余 classes

(在 delphi 中,我认为这个标志是已发布的 属性,可在对象检查器中使用,这使得在每个子项上包含或排除功能变得非常容易 classes)

为了避免疯狂的多级复杂继承,遵循第二种方法是一种不好的做法吗?

  • 如果您想要新功能,最好为此创建新的 class。以后修改功能就变得容易了。
  • 如你所说,"other classes also inherit from class A";可能是这些 classes 不需要您添加到 class A 的功能。因此,最好创建单独的 class.
  • 虽然在第二种方法中你创建了标志来决定是否使用该功能,但我认为这是开销并且可能会导致未来的复杂性。

为单独的功能创建单独的 class 总是有帮助的。您可以轻松开发、维护、update/modify 代码;这就是面向对象编程的美妙之处。 所以,我更喜欢选项 1。