gpt4 book ai didi

java - 如何在 Java 中处理多个导出点

转载 作者:行者123 更新时间:2023-11-29 03:06:56 25 4
gpt4 key购买 nike

有时我会遇到一个例程,该例程将测试某些条件并继续或退出,类似于以下代码:

public void execute() {
if (context.condition1()) {
LOGGER.info("Condition 1 not satisfied.");
return;
}
doSomeStuff();

if (context.condition2()) {
LOGGER.info("Condition 2 not satisfied.");
return;
}
if (context.condition3()) {
LOGGER.info("Condition 3 not satisfied.");
return;
}

doRestOfStuff();
}

让我们假设在进入此方法之前无法测试这些条件。也许这是一个带有单一入口点的 servlet 或 Controller 。根据我的经验(远非丰富),这似乎是一种常见情况。

现在,这段代码闻起来不太好,是吗?处理此问题的最佳策略是什么?

最佳答案

我们在谈论多少个不同的退出点?

如果您的示例中只有 3 个,那么您的原始代码就可以了。它很容易阅读。我会将“只有一个导出点”视为一般指导方针,而不是硬性规定。

将其更改为一组嵌套的 if/else if block 我发现更难阅读,尤其是在缩进之后。如果您将来必须添加更多条件检查,您还可能会忘记将新条件正确放置到链中。

但是,如果您有很多条件并且可能需要添加更多条件(可能在运行时),那么您可以利用责任链模式。

最终结果看起来像这样:

public void execute() {
List<Condition> conditionChains = ....

for(Condition condition : conditionChain){
if(condition.notSatisfied(context)){
//here use condition#toString() to explain what wasn't satisfied.
//Could use another method like getDescrption() instead...
LOGGER.info(condition + " not satisfied.");
return;
}
condition.execute(context);
}
}

您将拥有一个接口(interface) Condition,它有 2 个方法来检查可满足性,然后另一个方法执行任何相关代码。

示例实现:

class Condition1 implements Condition{

public boolean isSatisfied(Context context){
...
}

public void execute(Context context){
doSomeStuff();
}
}


class Condition2 implements Condition{

public boolean isSatisfied(Context context){
...
}

public void execute(Context context){
//do nothing
}
}


class Condition3 implements Condition{

public boolean isSatisfied(Context context){
return !context.notCondition3();
}

public void execute(Context context){
doRestOfStuff();
}
}

关于java - 如何在 Java 中处理多个导出点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31706351/

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