这两种方法哪种更好?
有一些方法是由类A、B和C调用的。
这些方法应该封装在一个类D中(作为A、B和C的基类)吗?
还是应该将这些方法封装在一个类U中,其他类创建它的对象以根据需要使用这些方法。
应该根据什么标准做出决策?
谢谢。
这两种方法哪种更好?
有一些方法是由类A、B和C调用的。
这些方法应该封装在一个类D中(作为A、B和C的基类)吗?
还是应该将这些方法封装在一个类U中,其他类创建它的对象以根据需要使用这些方法。
应该根据什么标准做出决策?
谢谢。
你应该创建一个静态
实用类。
只有在确实意义上需要时才使用继承——如果A
、B
和C
实际上确实是一个D
。
abstract
方法被A
、B
和C
覆盖。 - SLaks使用基类 如果您将编写一些仅依赖于基类的逻辑 - 那么创建一个基类是有意义的。在这种情况下,派生类应完全可替换为基类。不应该有任何开关逻辑来检查派生类型并相应地行事。请参见Liskov替换原则:http://en.wikipedia.org/wiki/Liskov_substitution_principle
使用实用程序类 有些语言有限制,它们不支持多重继承。如果您已经有了一个有意义的基类,则需要使用实用程序类。此外,当您使用继承时,从派生类到基类的耦合非常紧密。
如果派生类自然地可替代其基类,则我会选择基类。如果目的仅是在类之间共享一些可重用代码,则使用实用程序类更有意义。