gpt4 book ai didi

java - 使用模式避免 ifs

转载 作者:行者123 更新时间:2023-12-02 12:45:06 26 4
gpt4 key购买 nike

我知道您可以通过使用策略或命令模式的多态性来删除 if block 。但是,假设我的代码如下所示:

ArgumentObject arg = getArg();

if (arg.getId() == "id2_1" || arg.getId() == "id3_1" || arg.getId() == "id4_1") {
//do something
}
if (arg.getId() == "id2_1") {
//do something
}
if (arg.getId() = "id2_2" || arg.getId() = "id3_1") {
//do something
}
if (arg.getId().startsWith("id1") || arg.getId().startsWith("id4")) {
//do something
}

基本上,代码根据产品 ID 执行一些字段填充操作。它使用startsWith()检查产品是否来自某组产品,然后执行填充,检查产品是否具有特定的id,然后适本地填充字段等。

我不知道如何在这里使用策略模式?如果我创建一个策略来处理第一个 if 语句,那么如何继续处理第二个语句?问题在于 if 并不是相互排斥的。我应该将相关的 if 移至策略类吗?有什么模式可以帮助我重构它以便更容易测试吗?

最佳答案

您的代码揭示的问题更为基本:它违反了告诉!不要问!原则。

您的arg对象不应具有方法getId(),而应该具有此时调用的通用接口(interface)方法。要完成的工作可以在实例化时注入(inject) arg 对象,也可以将它们作为参数传递给方法,由 arg 对象的具体实现决定调用哪个参数...

关于java - 使用模式避免 ifs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44800278/

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