枚举策略模式可以防止大量if-else出现。
核心点:enum方法共用,重写方法valueOf。如下
public enum TestStrategyEnum {
scene_choose(1) {
@Override
public String execute() {
return null;
}
},
device_choose(2) {
@Override
public String execute() {
return null;
}
};
int code;
TestStrategyEnum(int code) {
this.code = code;
}
public int getCode() {
return code;
}
public abstract String execute();
public static TestStrategyEnum valueOf(int code) {
TestStrategyEnum[] values = values();
for (TestStrategyEnum dataPointStrategyEnum : values) {
if (dataPointStrategyEnum.code == code) {
return dataPointStrategyEnum;
}
}
throw new IllegalArgumentException("No enum constant " + code);
}
}
调用:
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
System.out.println(TestStrategyEnum.valueOf(1));
System.out.println(TestStrategyEnum.valueOf(10003));
System.out.println(TestStrategyEnum.valueOf("device_choose"));
System.out.println(TestStrategyEnum.valueOf("device_choose1"));
}
}
如下结果:
scene_choose
java.lang.IllegalArgumentException: No enum constant 10003
device_choose
java.lang.IllegalArgumentException: No enum constant com.guigu.test.TestStrategyEnum.device_choose1