我有一个带有一个方法签名的Validator
接口:public List<ParameterError> validateParameters(Parameters parameters);
各种类实现了这个接口。
还有一些常见的方法,如isInteger
,isInRange
等。我应该在ValidationHelper
中使用这些方法,并在实现Validator
接口的类中使用组合或者我应该将Validator
作为一个抽象类,将这些方法放在那里并使用继承而不是组合?
答案 0 :(得分:3)
我假设isInteger
,isInRange
等,如果一般实现,甚至可以在Validator类之外使用。在这种情况下,它们应该进入一个单独的util类,该类应该只被称为Utils
而不是ValidationHelper
。应始终在可以使用它们的最广泛的上下文中命名类/方法。
答案 1 :(得分:2)
你的辅助方法是static
方法的良好候选者,因为它们是纯函数,并且它们不是多态的。您应该使用实用程序类并将所有此类函数放入其中。这导致最小耦合:既不是组成,也不是继承;只是纯粹依赖于方法本身。
答案 2 :(得分:0)
我更喜欢组合而不是继承,因为实现Validator
的类可能不一定共享is-a
关系。他们更有可能对Validator
界面提供的方法感兴趣。
此外,是否无法在接口isInteger
中实现通用(Validator
等)方法并将其标记为final
?他们甚至可以按this问题的方式制作static
。