文章最後更新於 2023 年 3 月 27 日
Switch case block是一種常見的編程結構,通常用於根據不同的情況執行不同的代碼。然而,當情況增加時,switch case block變得冗長且難以維護。為了解決這個問題,可以使用Strategy Pattern來重構switch case block。
Strategy Pattern是一種行為型設計模式,它允許您在運行時選擇算法的行為。在這種模式中,您可以創建一個策略接口,該接口定義了所有支持的算法,並且有多個實現該接口的類,每個類實現一個算法。
首先,讓我們看一下如何使用switch case block來執行四個數學操作:加法,減法,乘法和除法。
public int calculate(String operation, int a, int b) {
int result = 0;
switch (operation) {
case "add":
result = a + b;
break;
case "subtract":
result = a - b;
break;
case "multiply":
result = a * b;
break;
case "divide":
result = a / b;
break;
default:
throw new IllegalArgumentException("Invalid operation: " + operation);
}
return result;
}
在上面的代碼中,我們使用switch case block來根據傳入的operation參數來決定執行哪個操作。但是,如果您想添加新的操作,您需要修改calculate方法,這會導致代碼變得難以維護和擴展。
現在,讓我們使用Strategy Pattern來重構calculate方法。首先,我們需要創建一個名為MathOperation的策略接口:
public interface MathOperation {
int execute(int a, int b);
}
該接口定義了一個execute方法,該方法接受兩個int參數a和b,並返回一個int值。接下來,我們需要創建四個實現MathOperation接口的類,每個類實現一個算法:
public class AddOperation implements MathOperation {
@Override
public int execute(int a, int b) {
return a + b;
}
}
public class SubtractOperation implements MathOperation {
@Override
public int execute(int a, int b) {
return a - b;
}
}
public class MultiplyOperation implements MathOperation {
@Override
public int execute(int a, int b) {
return a * b;
}
}
public class DivideOperation implements MathOperation {
@Override
public int execute(int a, int b) {
return a / b;
}
}
現在,我們可以使用MathOperation接口及其實現類來重構calculate方法。我們可以創建一個HashMap來存儲每個操作的名稱和相應的MathOperation對象。在執行calculate方法時,我們只需要在HashMap中查找傳入的操作名稱,並調用對應的MathOperation對象的execute方法即可。
public class Calculator {
private final Map<String, MathOperation> operations = new HashMap<>();
public Calculator() {
operations.put("add", new AddOperation());
operations.put("subtract", new SubtractOperation());
operations.put("multiply", new MultiplyOperation());
operations.put("divide", new DivideOperation());
}
public int calculate(String operation, int a, int b) {
MathOperation mathOperation = operations.get(operation);
if (mathOperation == null) {
throw new IllegalArgumentException("Invalid operation: " + operation);
}
return mathOperation.execute(a, b);
}
}
在上面的代碼中,我們在Calculator類的構造函數中創建了一個HashMap,該HashMap存儲了每個操作的名稱和對應的MathOperation對象。在calculate方法中,我們從HashMap中獲取相應的MathOperation對象,如果未找到對應的操作,我們會拋出IllegalArgumentException異常。
使用Strategy Pattern重構switch case block可以使代碼更加靈活和易於擴展。如果您需要添加新的操作,您只需要創建一個新的實現MathOperation接口的類即可。這種方法還可以使代碼更加可讀和易於維護,因為每個操作都是在其專有的類中實現的,並且每個類都有一個明確的責任。
關於作者
- 我是Oscar (卡哥),前Yahoo Lead Engineer、高智商同好組織Mensa會員,超過十年的工作經驗,服務過Yahoo關鍵字廣告業務部門、電子商務及搜尋部門,喜歡彈吉他玩音樂,也喜歡投資美股、虛擬貨幣,樂於與人分享交流!
最新文章
- 2024 年 8 月 26 日Java如何在 Java Spring Boot 中輕鬆使用 @Cacheable 提高應用效能
- 2024 年 8 月 25 日技術文章新手必看:MongoDB 實用入門指南 – 從零開始學習 NoSQL 數據庫
- 2024 年 7 月 18 日未分類ChatGPT, Claude AI 進階提示詞技巧:掌握AI對話的藝術 (Prompt Engineering)
- 2024 年 6 月 11 日程式設計Java 中的 volatile
如果對文章內容有任何問題,歡迎在底下留言讓我知道。
如果你喜歡我的文章,可以按分享按鈕,讓更多的人看見我的文章。
網友留言