では、「フォールスルーのある switch を戦略パターンで安全に置き換える練習問題集」 を作ります。
初心者でも順を追って学べるように 問題+ヒント+ステップ例 形式にします。
問題1:管理者・ユーザーの共通処理(フォールスルーあり)
要件
- ユーザー種別:
ADMIN,USER,GUEST - 処理内容:
ADMIN→ 管理者用処理+共通ユーザー処理USER→ 共通ユーザー処理GUEST→ ゲスト用処理
元の switch 文(フォールスルーあり)
switch (userType) {
case "ADMIN":
adminTask(); // 管理者専用
// fall through
case "USER":
userTask(); // 共通
break;
case "GUEST":
guestTask();
break;
}
Java指示
- このフォールスルーを 戦略パターンで安全に置き換える
- 共通処理は
UserTaskStrategy内で組み合わせる
問題2:ステップ実行バッチ(途中再開)
要件
- ステップ番号:
1, 2, 3, 4 - 処理内容:
- 指定されたステップ番号から最後のステップまで順番に実行
- 元の switch 文はフォールスルーで処理を流している
元の switch 文
switch (step) {
case 1:
step1();
// fall through
case 2:
step2();
// fall through
case 3:
step3();
// fall through
case 4:
step4();
break;
}
Java指示
- 戦略パターンで ステップごとにクラス化
- 「途中ステップから最後まで」安全に実行できるように設計
問題3:権限累積処理(ADMIN → MODERATOR → USER → GUEST)
要件
- ユーザー権限:
ADMIN,MODERATOR,USER,GUEST - 処理内容:
- 上位権限は下位権限の処理もすべて含む
- 元の switch 文はフォールスルーで上位から下位まで処理
元の switch 文
switch (role) {
case "ADMIN":
adminFeatures();
// fall through
case "MODERATOR":
moderatorFeatures();
// fall through
case "USER":
userFeatures();
// fall through
case "GUEST":
guestFeatures();
break;
}
Java指示
- 戦略パターンで 累積処理を安全に再現
- フォールスルーに依存せず、可読性と拡張性を確保
ヒント(共通)
- インターフェース作成
interface Strategy {
void execute();
}
Java- 条件ごとにクラス化
AdminUserStrategy,UserStrategy,GuestUserStrategyなど
- 共通処理の組み合わせ
- フォールスルーでやっていた「上位→下位」の流れは、
クラス内でオブジェクト呼び出しやメソッド呼び出しで再現する
- フォールスルーでやっていた「上位→下位」の流れは、
- ファクトリ使用
- main から戦略オブジェクトを取得して execute するだけ
- 累積処理の場合
- 上位権限クラスの
execute()内で、下位権限オブジェクトを生成して順に呼び出す方法が有効
- 上位権限クラスの
💡 この練習問題集を解くと、
- フォールスルーの危険性を理解
- 安全に戦略パターンに置き換える技術
- 共通処理・累積処理を整理して可読性を高める方法
が身につきます。

