比如说,我想创建一个 Validator
interface
或abstract class
-> 这个想法是每个类 implements
或extends
从这里Validator
应该实现一个名为 validate(String input)
的方法
我的想法是我只想打电话 LastNameValidator.validate("McDonalds")
这样我就不必创建 validator 的实例。
但是,我无法创建该方法 validate(String input)
static
在 interface
的任何一种情况下Validator
也不abstract class
Validator
。 (大概静态方法已经在类加载时创建了?)
我也不关心使用Singleton
创建实例或Factory
那implement
或extends
Validator
,因为我认为不需要创建这样的实例只是为了调用静态方法
OOP/Java 的方法是什么?
================================================== =================================== 澄清:
我想做public static abstract void validate(String input)
在 Validator
抽象类
或者
我想做public static void validate(String input)
在 Validator
界面
但是当然,这些在语法上是无效的。不创建 Validator 实例但“覆盖”这些静态方法的有效方法是什么(或者,让我相信我必须有这样一个类的实例才能调用纯粹的 static
方法?)
最佳答案
使用静态方法肯定不是“非常”面向对象的。这就是为什么 Java 甚至不会编译将 static
和 abstract
修饰符附加到某个方法的源文件。因此,您在问题末尾发布的两个选项都不起作用。 (接口(interface)方法默认是抽象的,即使您没有显式添加修饰符)。
如果您不想使用单例(不知道为什么),您可以应用经典工厂模式,也许与定义包含所有可能的 validator 类型的枚举相结合。这是一个随机示例:
枚举:
public enum ValidatorType{
AGE,LAST_NAME;
}
工厂类
public class ValidatorFactory{
public static Validator getValidator(ValidatorType type){
if(ValidatorType.AGE.equals(type)){
return new AgeValidator(); //won't post the AgeValidator definition here
}
if(ValidatorType.LAST_NAME.equals(type)){
return new LastNameValidator(); //won't post the LastNameValidator definition here
}
return null;
}
}
客户端代码
ValidatorFactory.getValidator(ValidatorType.LAST_NAME).validate("Burger King");
关于java - 如何使用 "static"方法面向对象设计对象层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22184240/