java - 如何使用 "static"方法面向对象设计对象层次结构

标签 java oop

比如说,我想创建一个 Validator interfaceabstract class -> 这个想法是每个类 implementsextends从这里Validator应该实现一个名为 validate(String input) 的方法

我的想法是我只想打电话 LastNameValidator.validate("McDonalds")这样我就不必创建 validator 的实例。

但是,我无法创建该方法 validate(String input) staticinterface 的任何一种情况下Validator也不abstract class Validator 。 (大概静态方法已经在类加载时创建了?)

我也不关心使用Singleton创建实例或Factoryimplementextends Validator ,因为我认为不需要创建这样的实例只是为了调用静态方法

OOP/Java 的方法是什么?

================================================== =================================== 澄清:

我想做public static abstract void validate(String input)Validator抽象类

或者

我想做public static void validate(String input)Validator界面

但是当然,这些在语法上是无效的。不创建 Validator 实例但“覆盖”这些静态方法的有效方法是什么(或者,让我相信我必须有这样一个类的实例才能调用纯粹的 static 方法?)

最佳答案

使用静态方法肯定不是“非常”面向对象的。这就是为什么 Java 甚至不会编译将 staticabstract 修饰符附加到某个方法的源文件。因此,您在问题末尾发布的两个选项都不起作用。 (接口(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/

相关文章:

java - 在 java String.format 中转义格式化字符

java - 使用 proguard 后,应用程序因 com.facebook.FacebookContentProvider 的 java.lang.NoClassDefFoundError 崩溃

java - 无法在 Java 中循环 ResultSet

python - 如何访问和修改 LabTestRepository 类中的 __list_of_hospital_lab_test_ids?

oop - OOP 好还是坏?

java - CMU Sphinx4 音素听写

java - 单击选定的复选框

php - PDO 中的随机行数

java - Java封装

java - 使用带有抽象参数的策略设计模式