gpt4 book ai didi

Java 避免使用过多的 if 语句或过多的 validator 类

转载 作者:行者123 更新时间:2023-11-30 06:42:09 25 4
gpt4 key购买 nike

我使用了很多 if 语句来检查。比如:

if(statement 1){ 
block 1;
}
if(statement 2){
block 2;
}
...//about at least 20 if
if(statement n){
block n;
}

为了避免使用过多的 if 语句,我尝试使用策略模式为每个 if 语句创建 validator 类。比如:

public interface Validator<SomeObejct>{
public Result validate(SomeObject o);
}

public class SomeValidator implements Validator<SomeObject> {
@Override
public boolean validate(SomeObject o) throw Exception{
if(statement 1){
block 1;
}
}

因为我可能至少有 20 个 if 语句,它可能至少需要 20 个 validator 类。那么是否有更好的解决方案呢?或者我如何管理这 20 个 validator 类?

编辑:

更具体地说,我正在编写一些代码来检查我的日程安排中的问题。例如:

 if(currentDate > mustFinishDate){
warning();
}
if(NotScheduleADateForThisTask){
warning();
}
if(DateFormatNotCorrect){
error();
}

日期检查上方也可能是 if 语句 block 。

最佳答案

您可以使用复合模式来维护所有 validator 的列表:

class ValidatorComposite<T> implements Validator<T> {
List<Validator<T>> validators = new ArrayList<>();
public void addValidator(Validator<T> add) { validators.add(add)); }

public Result validate(T toValidate) {
Result result = Result.OK;
for (Validator<T> v : validators) {
result = v.validate(toValidate);
if (result != Result.OK) break;
}
return result;
}
}

并且由于 Validator 只有一个方法,对于 Java 8 它是一个函数式接口(interface),所以您实际上并不需要“20 个类”,但可以使用 lambda 动态创建一个列表。

ValidatorComposite<SomeObject> val = new ValidatorComposite<>();
val.addValidator(so -> condition1 ? block1(so) : Result.OK);
val.addValidator(so -> condition2 ? block2(so) : Result.OK);

等等。

您的代码示例并不真正一致,因为首先您声明 Validator 以返回 Result 然后让实现返回 boolean(甚至抛出一个 Exception),所以我通过忽略异常和使用 Result.OK 值来整合两者。

关于Java 避免使用过多的 if 语句或过多的 validator 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54008564/

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