减少if或switch
方式一:枚举
public enum Operator {
ADD {
@Override
public int apply(int a, int b) {
return a + b;
}
},
MUL {
@Override
public int apply(int a, int b) {
return a * b;
}
};
public abstract int apply(int a, int b);
}
方式二:工厂模式
- 接口
public interface Operation { int apply(int a, int b); }
- 实现
public class AddOperation implements Operation{ @Override public int apply(int a, int b) { return a + b; } } public class MultOperation implements Operation{ @Override public int apply(int a, int b) { return a * b; } }
- 操作工厂
public class OperatorHolder { public static final String OPERATION_ADD = "add"; public static final String OPERATION_MUL = "multiply"; static final Map<String, Operation> operations; static { operations = new HashMap<>(2); operations.put(OPERATION_ADD, new AddOperation()); operations.put(OPERATION_MUL, new MultOperation()); } public static int operate(int a, int b, String type) throws Exception{ Operation operation = operations.get(type); if (operation == null){ throw new IllegalArgumentException("illegal type " + type); } return operation.apply(a, b); } }
方式三:TODO
待补充