Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 组合与继承_Java_Design Patterns - Fatal编程技术网

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
?甚至可以按照问题的思路将它们设置为
静态