如何处理java中使用同一对象的多个if语句和案例?

如何处理java中使用同一对象的多个if语句和案例?,java,if-statement,design-patterns,logic,Java,If Statement,Design Patterns,Logic,我有一个问题,当使用在逻辑中使用相同对象的多个if语句时,如何对代码进行最佳排序 我在表中自定义列值,根据列ID,将应用不同的逻辑来提取特定列的值 假设我有三个不同的列,分别命名为“Column 1”、“Column 2”和“Column 3”,其中“Column 1”和“Column 3”在其逻辑中都使用称为obj的自定义对象,而“Column 2”则不使用 排列if语句的最佳方法是什么?我应该在哪里创建对象?我添加了三个不同的案例,哪一个是最好的,为什么?另一个更好的独奏曲 提前谢谢 //

我有一个问题,当使用在逻辑中使用相同对象的多个if语句时,如何对代码进行最佳排序

我在表中自定义列值,根据列ID,将应用不同的逻辑来提取特定列的值

假设我有三个不同的列,分别命名为“Column 1”、“Column 2”和“Column 3”,其中“Column 1”和“Column 3”在其逻辑中都使用称为obj的自定义对象,而“Column 2”则不使用

排列if语句的最佳方法是什么?我应该在哪里创建对象?我添加了三个不同的案例,哪一个是最好的,为什么?另一个更好的独奏曲

提前谢谢

// Case 1
public Object getColumnValue(String columndId) {
    if (columndId.equals("Column 1") || columndId.equals("Column 3")) {
        customObject obj = new customObject();
        if (columndId.equals("Column 1")) {
            // do something with the custom object
        } else if (columndId.equals("Column 3") ||) {
            // do something else with the custom object
        }
    } else if (columndId.equals("Column 2")) {
        // do something without the custom object
    } else {
        return null;
    }
}

// Case 2
public Object getColumnValue(String columndId) {
    customObject obj = new customObject();
    if (columndId.equals("Column 1") {
        // do something with the custom object
    } else if (columndId.equals("Column 2")) {
        // // do something without the custom object
    } else if (columndId.equals("Column 3")) {
        /// do something with the custom object
    } else {
        return null;
    }
}

// Case 3
public Object getColumnValue(String columndId) {
    if (columndId.equals("Column 1") {
        customObject obj = new customObject();
        // do something with the custom object
    } else if (columndId.equals("Column 2")) {
        // // do something without the custom object
    } else if (columndId.equals("Column 3")) {
        customObject obj = new customObject();
        /// do something with the custom object
    } else {
        return null;
    }
}

// Case 4
public Object getColumnValue(String columndId) {
    switch (columnId) {
        case "Column 1":
        case "Column 3":
            customObject obj = new customObject();
            switch (columnId) {
                case "Column 1":
                    // do somethingt with custom object
                case "Column 3":
                    // do something else with custom object
            }
        case "Column 2":
            // do something without custom object
    }
}

我认为战略设计模式是最好的选择。每个定制都有一个这样的专用类(更好的名称是MyCustomizationStrategy):


你听说过switch案例陈述吗?不管怎样,这都是一个代码审查question@Stultuske不过,代码审查网站不会接受它,因为代码是假设性的,永远不会被接受。@Stultuske是的,我接受了,那么你是说在创建对象之前,在多个情况下应该使用该对象,然后呢?每种情况都意味着以不同的方式处理对象。就像我刚才添加的案例4一样。@marcusystad避免if/else(或多个if)涉及检查拥有方法
getColumnValue()
的类的设计。设计模式策略可以帮助替换多个if。`对于案例4,您可以在私有方法中提取第二个
开关
,以避免
开关
nesting@Cedric不幸的是,我无法更改拥有方法
getColumnValue()的类
因为它是软件代码库的一部分,我不允许更改。我应该如何考虑何时创建对象以及如何以最佳方式嵌套类似的ifs?
public abstract class CustomizationStrategy {

  protected abstract String getSupportedColumnId(); 

  public boolean isApplicable(String columnId) {
    return getSupportedColumnId().equals(columnId);
  }

  public abstract Object customizeColumnValue(String columnId);

}

public class MyCustomizationStrategy extends CustomizationStrategy {
  private final static String SUPPORTED_COLUMN_ID = "Column X";

  @Override
  protected List<String> getSupportedColumnId() {
    return SUPPORTED_COLUMN_ID;
  }

  public Object customizeColumnValue(String columnId) {
    return ...
  }
}
private static final List<CustomizationStrategy> CUSTOMIZATION_STRATEGIES = 
  Arrays.asList(new MyCustomizationStrategy(), ...);

public Object getColumnValue(String columndId) {
  return CUSTOMIZATION_STRATEGIES.stream()
    .filter(strategy -> strategy.isApplicable(columnId))
    .map(strategy -> strategy.customizeColumnValue(columnId))
    .findFirst()
    .orElse(null);
}