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();
  }
}

通過策略模式,代碼結構更加清晰,擴展性更強.

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容