Java 组合与继承
我有一个Java 组合与继承,java,design-patterns,Java,Design Patterns,我有一个Validator接口,带有一个方法签名:公共列表validateParameters(参数)各种类实现这个接口 还有一些常见的方法,如isInteger,isInRange,等等。我应该在ValidationHelper中使用这些方法,并在实现Validator接口的类中使用组合,还是应该使Validator成为一个抽象类,将这些方法放在那里,并使用继承而不是组合?我假设,isInteger,isInRange等即使在验证程序类之外也可以使用,如果它们是通用实现的。在这种情况下,它们应
Validator
接口,带有一个方法签名:公共列表validateParameters(参数)代码>各种类实现这个接口
还有一些常见的方法,如isInteger
,isInRange
,等等。我应该在ValidationHelper
中使用这些方法,并在实现Validator
接口的类中使用组合,还是应该使Validator
成为一个抽象类,将这些方法放在那里,并使用继承而不是组合?我假设,isInteger
,isInRange
等即使在验证程序类之外也可以使用,如果它们是通用实现的。在这种情况下,它们应该进入一个单独的util类,该类应该被称为Utils
,而不是ValidationHelper
。类/方法应始终在您可以使用它们的最广泛的上下文中命名。我假设isInteger
,isInRange
等即使在验证程序类之外也可以使用,如果它们是通用实现的。在这种情况下,它们应该进入一个单独的util类,该类应该被称为Utils
,而不是ValidationHelper
。类/方法的命名应始终在您可以使用它们的最广泛的上下文中进行。您的助手方法是静态
方法的良好候选方法,因为它们是纯函数,不需要多态性。您应该使用一个实用程序类,并将所有此类函数放在其中。这将导致最少的耦合:既不是组合,也不是继承;仅仅依赖于方法本身。您的助手方法是静态方法的很好候选方法,因为它们是纯函数,不需要多态。您应该使用一个实用程序类,并将所有此类函数放在其中。这将导致最少的耦合:既不是组合,也不是继承;纯粹依赖于方法本身。我更喜欢组合而不是继承,因为实现Validator
的类不一定共享is-a
关系。他们更可能对验证程序
接口提供的方法感兴趣
另外,是否不可能在接口Validator
中实现泛型(isInteger
etc)方法并标记为final
?甚至可以按照问题的思路将它们设置为静态 我更喜欢组合而不是继承,因为实现Validator
的类不一定共享is-a
关系。他们更可能对验证程序
接口提供的方法感兴趣
另外,是否不可能在接口Validator
中实现泛型(isInteger
etc)方法并标记为final
?甚至可以按照问题的思路将它们设置为静态