如何优雅的优化if-else
今天介绍的是如何用枚举加策略模式去优化代码中的大量if-else,让你的代码开起来更有层次和优美。
优化前的代码
import com.google.common.collect.Maps;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, Object> params = Maps.newHashMap();
params.put("key", "2");
test(params);
}
static void test(Map<String, Object> params) {
String keyValue = MapUtils.getString(params, "key");
//这个地方可能有大量if-else业务处理逻辑,这里简单举例
if (StringUtils.equals("1", keyValue)) {
System.out.println("业务逻辑1");
} else if (StringUtils.equals("2", keyValue)) {
System.out.println("业务逻辑2");
} else if (StringUtils.equals("3", keyValue)) {
System.out.println("业务逻辑3");
} else {
System.out.println("业务逻辑4");
}
}
}
优化后的代码
import com.google.common.collect.Maps;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, Object> params = Maps.newHashMap();
params.put("key", "2");
TestEnum testEnum = TestEnum.getTestEnum(params);
testEnum.handle();
}
}
enum TestEnum implements HandleService {
ONE("1", "业务1") {
@Override
public void handle() {
System.out.println("业务逻辑1");
}
},
TWO("2", "业务2") {
@Override
public void handle() {
System.out.println("业务逻辑2");
}
},
THREE("3", "业务3") {
@Override
public void handle() {
System.out.println("业务逻辑3");
}
},
DEFAULT("4", "业务4") {
@Override
public void handle() {
System.out.println("业务逻辑3");
}
};
private String key;
private String desc;
TestEnum(String key, String desc) {
this.key = key;
this.desc = desc;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
/**
* 根据业务判断获取具体枚举类型
* @param params
* @return
*/
public static TestEnum getTestEnum(Map<String, Object> params) {
String keyValue = MapUtils.getString(params, "key");
for (TestEnum testEnum : TestEnum.values()) {
if (StringUtils.equals(testEnum.getKey(), keyValue)) {
return testEnum;
}
}
return TestEnum.DEFAULT;
}
}
interface HandleService {
/**
* 执行具体的业务逻辑
*/
void handle();
}
枚举类可以抽取出来,这样代码就不会显得那么臃肿了哈。
转载地址:https://blog.csdn.net/qq_42720757/article/details/123464700