「フォールスルーのある switch を戦略パターンで安全に置き換える練習問題集」を用意しました。複数条件をまとめたいケースを題材にして、switch文のフォールスルーを戦略パターンへリファクタリングする練習ができます。
練習問題1:季節判定
元コード(フォールスルーあり)
switch (month) {
case 3:
case 4:
case 5:
System.out.println("春");
break;
case 6:
case 7:
case 8:
System.out.println("夏");
break;
case 9:
case 10:
case 11:
System.out.println("秋");
break;
case 12:
case 1:
case 2:
System.out.println("冬");
break;
default:
System.out.println("不正な月です");
}
Java課題
このフォールスルーを使った季節判定を、戦略パターンで安全に置き換えてください。
練習問題2:HTTPステータス分類
元コード(フォールスルーあり)
switch (statusCode) {
case 200:
case 201:
case 204:
System.out.println("成功レスポンス");
break;
case 400:
case 404:
System.out.println("クライアントエラー");
break;
case 500:
case 503:
System.out.println("サーバーエラー");
break;
default:
System.out.println("未知のステータス");
}
Java課題
成功系・クライアントエラー系・サーバーエラー系をそれぞれ戦略クラスに分け、Mapで管理してください。
練習問題3:ユーザー権限判定
元コード(フォールスルーあり)
switch (role) {
case "ADMIN":
case "SUPERUSER":
System.out.println("全権限を付与");
break;
case "USER":
case "GUEST":
System.out.println("制限付き権限を付与");
break;
default:
System.out.println("不明な権限");
}
Java課題
権限ごとに戦略クラスを作り、RoleContextから呼び出せるようにしてください。
練習問題4:ログレベル出力
元コード(フォールスルーあり)
switch (logLevel) {
case "INFO":
case "DEBUG":
System.out.println("通常ログ");
break;
case "WARN":
case "ERROR":
System.out.println("重要ログ");
break;
default:
System.out.println("未知のログレベル");
}
Java課題
ログレベルごとに戦略クラスを作り、Map+戦略パターンで安全に置き換えてください。
練習の進め方
- switch文を確認 → フォールスルーでまとめている条件を特定。
- 戦略インターフェースを設計 →
HandlerやStrategyを定義。 - 具体戦略クラスを作成 → 各グループの処理をクラスに分離。
- Mapやenumで戦略を選択 → switchをなくして戦略を呼び出す。


