「switch文を戦略パターンにリファクタリングする練習問題」をいくつか用意しました。実務でありがちなケースを題材にしています。
練習問題1:注文ステータス管理
元コード(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課題
- このswitch文を戦略パターンにリファクタしてください。
- 各ステータスごとに「戦略クラス」を作り、
Map<String, Handler>で管理する形を目指しましょう。
練習問題2:支払い方法の処理
元コード(switch)
switch (paymentMethod) {
case "CREDIT":
System.out.println("クレジットカードで支払い");
break;
case "CASH":
System.out.println("現金で支払い");
break;
case "BANK":
System.out.println("銀行振込で支払い");
break;
default:
throw new UnsupportedOperationException("未対応の支払い方法: " + paymentMethod);
}
Java課題
- 戦略パターンを使って「支払い処理」を分離してください。
- 各支払い方法ごとにクラスを作り、
PaymentContextから呼び出せるようにしましょう。
練習問題3:ログレベルの出力
元コード(switch)
switch (logLevel) {
case "INFO":
System.out.println("[INFO] 通常ログ");
break;
case "WARN":
System.out.println("[WARN] 注意ログ");
break;
case "ERROR":
System.out.println("[ERROR] エラーログ");
break;
default:
System.out.println("[DEBUG] デバッグログ");
}
Java課題
- 戦略パターンで「ログ出力戦略」を作成してください。
LogContextが入力されたレベルに応じて適切な戦略を選び、出力するようにしてください。
練習の進め方
- switch文を確認 → 値ごとに処理が分かれていることを理解。
- 戦略インターフェースを設計 →
HandlerやPaymentStrategyなど。 - 具体戦略クラスを作成 → 各caseの処理をクラスに移す。
- Mapやenumで戦略を選択 → switchをなくして戦略を呼び出す。


