Java | フォールスルーのある switch を戦略パターンで安全に置き換える練習問題集

Java Java
スポンサーリンク

では、「フォールスルーのある 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

指示

  • 戦略パターンで 累積処理を安全に再現
  • フォールスルーに依存せず、可読性と拡張性を確保

ヒント(共通)

  1. インターフェース作成
interface Strategy {
    void execute();
}
Java
  1. 条件ごとにクラス化
    • AdminUserStrategy, UserStrategy, GuestUserStrategy など
  2. 共通処理の組み合わせ
    • フォールスルーでやっていた「上位→下位」の流れは、
      クラス内でオブジェクト呼び出しメソッド呼び出しで再現する
  3. ファクトリ使用
    • main から戦略オブジェクトを取得して execute するだけ
  4. 累積処理の場合
    • 上位権限クラスの execute() 内で、下位権限オブジェクトを生成して順に呼び出す方法が有効

💡 この練習問題集を解くと、

  • フォールスルーの危険性を理解
  • 安全に戦略パターンに置き換える技術
  • 共通処理・累積処理を整理して可読性を高める方法

が身につきます。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました