では「enum+戦略パターン」の組み合わせ例を紹介します。これは実務で非常に強力で、switch文を完全に排除しつつ、enumで安全に分岐を管理できます。
例:注文ステータス管理(enum+戦略)
1. 戦略インターフェース
interface OrderStatusHandler {
void handle();
}
Java2. 具体的な戦略クラス
class NewHandler implements OrderStatusHandler {
public void handle() {
System.out.println("新規注文を登録しました");
}
}
class ProcessingHandler implements OrderStatusHandler {
public void handle() {
System.out.println("注文を処理中です");
}
}
class ShippedHandler implements OrderStatusHandler {
public void handle() {
System.out.println("注文を発送しました");
}
}
class CancelledHandler implements OrderStatusHandler {
public void handle() {
System.out.println("注文をキャンセルしました");
}
}
Java3. enumに戦略を紐付け
enum OrderStatus {
NEW(new NewHandler()),
PROCESSING(new ProcessingHandler()),
SHIPPED(new ShippedHandler()),
CANCELLED(new CancelledHandler());
private final OrderStatusHandler handler;
OrderStatus(OrderStatusHandler handler) {
this.handler = handler;
}
public void execute() {
handler.handle();
}
}
Java4. 利用側
public class Main {
public static void main(String[] args) {
OrderStatus status = OrderStatus.NEW;
status.execute(); // 新規注文を登録しました
OrderStatus another = OrderStatus.SHIPPED;
another.execute(); // 注文を発送しました
}
}
Java解説
- switch不要:enumに戦略を直接紐付けることで、呼び出し側は
status.execute()だけで済む。 - 安全性:enumなので、存在しないステータスはコンパイル時に防げる。
- 拡張性:新しいステータスを追加する場合はenum定義に1行追加するだけ。
- 責務分離:処理は戦略クラスに分けられているのでテストしやすい。
まとめ
- switch文 → 戦略パターンで責務分離。
- enum+戦略パターンでさらに安全性と拡張性を確保。
- 実務では「状態管理」「支払い方法」「ログレベル」などで特に有効。


