Java面试:什么时候需要将if-else优化成策略模式

将 if-else 语句优化为策略模式通常是在以下场景下考虑的:

1.代码可读性差

当 if-else 嵌套或分支过多时,代码变得难以阅读和维护。如果新增一个条件需要修改现有代码,违反了开闭原则(对扩展开放,对修改关闭)。

2.功能扩展频繁

如果业务逻辑经常需要新增条件分支,每次都需要修改 if-else 结构,容易引入错误。使用策略模式可以通过新增类或方法实现扩展,而无需改动已有代码。

3.逻辑复杂度高

每个分支的逻辑较为复杂,导致单个函数过长。策略模式可以将每个分支的逻辑封装到独立的类或方法中,降低耦合度。

4.性能问题

如果 if-else 条件判断较多且执行频率高,可能会影响性能。策略模式结合工厂模式或映射表(如字典),可以快速定位对应的逻辑处理。

5.测试难度增加

复杂的 if-else 结构增加了单元测试的覆盖难度。策略模式将每个分支逻辑分离,便于单独测试。

示例对比

if-else 实现
public void process(String type) {   
  if ("A".equals(type)) {       
    // 处理 A 类型逻辑   
  } else if ("B".equals(type)) {       
    // 处理 B 类型逻辑   
  } else if ("C".equals(type)) {       
    // 处理 C 类型逻辑   
  } else {       
    // 默认逻辑   
  }
}
策略模式实现
// 定义策略接口
interface Strategy {
  void execute();
}

// 具体策略实现
class StrategyA implements Strategy {
  public void execute() {
    // 处理 A 类型逻辑
  }
}

class StrategyB implements Strategy {
  public void execute() {
    // 处理 B 类型逻辑
  }
}

class StrategyC implements Strategy {
  public void execute() {
    // 处理 C 类型逻辑
  }
}

// 上下文类
class Context {
  private Map<String, Strategy> strategyMap = new HashMap<>();

  public Context() {
    strategyMap.put("A", new StrategyA());
    strategyMap.put("B", new StrategyB());
    strategyMap.put("C", new StrategyC());
  }

  public void process(String type) {
    Strategy strategy = strategyMap.getOrDefault(type, () -> {});
    strategy.execute();
  }
}

通过策略模式,代码结构更加清晰,扩展性更强.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容