Java | switch文を戦略パターンにリファクタリングする練習問題」

Java Java
スポンサーリンク

では「enum+戦略パターン」の組み合わせ例を紹介します。これは実務で非常に強力で、switch文を完全に排除しつつ、enumで安全に分岐を管理できます。


例:注文ステータス管理(enum+戦略)

1. 戦略インターフェース

interface OrderStatusHandler {
    void handle();
}
Java

2. 具体的な戦略クラス

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("注文をキャンセルしました");
    }
}
Java

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

4. 利用側

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+戦略パターンでさらに安全性と拡張性を確保。
  • 実務では「状態管理」「支払い方法」「ログレベル」などで特に有効。
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました