では「Map+ラムダ式(Java 8以降)」を使った軽量なリファクタ例を紹介します。これは switch文を使わずに、条件ごとの処理を関数としてMapに登録する方法です。
例:注文ステータス管理(Map+ラムダ)
元のコード(switch)
switch (status) {
case "NEW":
System.out.println("新規注文を登録しました");
break;
case "PROCESSING":
System.out.println("注文を処理中です");
break;
case "SHIPPED":
System.out.println("注文を発送しました");
break;
case "CANCELLED":
System.out.println("注文をキャンセルしました");
break;
default:
throw new IllegalArgumentException("不明なステータス: " + status);
}
Javaリファクタ後(Map+ラムダ)
import java.util.HashMap;
import java.util.Map;
public class OrderStatusHandler {
private static final Map<String, Runnable> handlers = new HashMap<>();
static {
handlers.put("NEW", () -> System.out.println("新規注文を登録しました"));
handlers.put("PROCESSING", () -> System.out.println("注文を処理中です"));
handlers.put("SHIPPED", () -> System.out.println("注文を発送しました"));
handlers.put("CANCELLED", () -> System.out.println("注文をキャンセルしました"));
}
public static void execute(String status) {
Runnable handler = handlers.getOrDefault(status,
() -> { throw new IllegalArgumentException("不明なステータス: " + status); });
handler.run();
}
public static void main(String[] args) {
execute("NEW"); // 新規注文を登録しました
execute("SHIPPED"); // 注文を発送しました
execute("UNKNOWN"); // IllegalArgumentException
}
}
Java解説
- switch不要:Mapに「キー(ステータス)」と「処理(ラムダ式)」を登録。
- getOrDefault:未知のキーが来た場合に例外を投げる処理をデフォルトで設定。
- 拡張性:新しいステータスを追加する場合はMapに1行追加するだけ。
- シンプル:戦略パターンほどクラス分割しなくても済むので軽量。
まとめ
- 戦略パターン → クラス分割で責務を明確化。大規模・複雑な処理に向いている。
- enum+戦略 → 型安全で拡張性が高い。状態管理に最適。
- Map+ラムダ → 軽量でシンプル。小規模な分岐処理に最適。


