gpt4 book ai didi

java - 避免对 validator 列表进行两次传递

转载 作者:行者123 更新时间:2023-12-01 11:47:15 24 4
gpt4 key购买 nike

我使用以下代码验证传递给文件中一系列命令的参数:

            for (Parameter p : s.getCommand(idx).getParameters()) {
for (ValidationFactory.TYPES validationType : ValidationFactory.TYPES.values()) {
validator = ValidationFactory.getValidator(validationType, errors);
try {
validator.validate(p);
} catch (ValidationException e) {
Report.logErrorMessage("Failed to validate: " + validationType);
continue;
}
}
}

然后在 ValidationFactory 中我有:

public final class ValidationFactory {

public enum TYPES {
PROPERTIES,
PORTS
};

private ValidationFactory() {
}

public static AbstractValidator getValidator(TYPES validationType,
ValidationErrors errors) {
switch (validationType) {
case PROPERTIES:
return new PropertiesValidator(errors);
case PORTS:
return new PortRangeValidator(errors);
default:
return null;
}
}}

这段代码工作得非常好,并且允许稍后添加新的 validator 。不过有一个相对较小的问题......

外部 for 循环迭代将传递给命令的参数列表,而内部 for 循环迭代可以执行验证的 validator 列表。然而,根据参数,可能不需要继续使用第二个 validator 进行验证,第一个 validator 可能已经完成了工作...因此,PropertiesValidator 可能已经完成了所需的工作,现在不需要调用第二个 validator ,但无论如何它都会调用它。我想我可以使用一个变量来维护验证状态,然后如果已经完成,它可以跳过。两个 validator 都扩展了一个 AbstractValidator 类,这将是最好的地方。

我想一次性完成验证,同时保留工厂模式的结构。我正在考虑放入某种委托(delegate)类。我使用的是 java 1.6,所以我无法打开字符串参数,这会很好。

最佳答案

定义一个通用 validator ,这对于所有 validator 来说都是通用的,并在属性和端口验证中定义特定的验证。因此,现在通过将通用逻辑转移到通用 validator 中并将特定验证转移到其他 validator 中,就不会出现重复验证。

关于java - 避免对 validator 列表进行两次传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29060509/

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