这个想法是每个类 implements或extends从这里Validator应该实现一个名为 val-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:06:44 25 4
gpt4 key购买 nike

比如说,我想创建一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com