gpt4 book ai didi

java - 确定正确状态字符串的条件逻辑

转载 作者:行者123 更新时间:2023-12-02 10:14:29 25 4
gpt4 key购买 nike

Java 应用程序中有一个状态变量,可以根据多种条件将其设置为多种法规之一。状态字段是一个字符串。当满足条件时,应立即返回状态,如下:

例如

String status = "";

if (condition1) {
return "STATUS_1";
} else if (condition2) {
return "STATUS_2";
} else if (condition3) {
return "STATUS_3";
} else if (condition4) {
return "STATUS_4";
}
...
else if (condition10) {
return "STATUS_10";
}

我已经考虑过哪种模式最适合使此代码更可靠...例如如果需要新条件,则需要编辑此类以添加新条件,这将打破开放/封闭 SOLID 原则

我研究过策略模式,特别是“用策略替换条件逻辑”,但是,当您只想决定使用一种计算/操作时,这似乎更合适......我的场景似乎不适合策略模式,因为我的逻辑决定状态,而不是确定要执行哪个单独的操作 - 我需要运行所有条件,直到其中一个为真

我想知道以下模式是否可行......

有如下界面

public interace StatusCondition {
boolean condition(Context context);
String getStatus();
}

实现如下:

public class StatusAStatusCondition implements StatusCondition {

boolean condition(Context context){
return context.getValue1() == 0 && context.getValue2().equals("A");
}

String getStatus(){
return "STATUS_A";
}
}

这将允许按顺序执行 StatusCondition 类的列表,并返回第一个 StatusCondition 的状态,其中 condition() 方法返回 true。例如:

public String getStatus(List<StatusCondition> statusConditions) {
for (StatusCondition statusCondition : statusConditions) {
if (statusCondition.condition()) {
return statusCondition.getStatus();
}
}
return "";
}


usage:

List<StatusCondition> statusConditions = new ArrayList<>();
statusConditions.add(statusAStatusCondition);
statusConditions.add(statusBStatusCondition);
statusConditions.add(statusCStatusCondition);
statusConditions.add(statusDStatusCondition);
statusConditions.add(statusEStatusCondition);
statusConditions.add(statusFStatusCondition);
...

String status = getStatus(statusConditions);

对我来说,这解决了开放封闭原则问题,并确保实现是单一责任...我的问题是,我建议的这种模式如何改进,或者是否有更适合我的场景的模式?

最佳答案

首先,你认为原始的 if/else 梯子违反了开闭原则,这是完全正确的。其次,将状态值转换为接口(interface)正是摆脱 stringly-typed programming 的正确步骤。 。第三,您的解决方案本质上是 Chain of Responsibility Pattern 。这是解决这个问题的一个很好的解决方案。总之,您的直觉是正确的。

关于java - 确定正确状态字符串的条件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54775874/

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