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

Java Java
スポンサーリンク

ここまで「switch → 戦略パターン → Map+ラムダ」と進めてきましたが、さらに enum+戦略パターン に進化させると、型安全性と拡張性が一気に高まります。


例:ユーザー権限判定(enum+戦略)

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

interface RoleStrategy {
    void assignPermissions();
}
Java

2. 具体的な戦略クラス

class FullPermissionStrategy implements RoleStrategy {
    public void assignPermissions() {
        System.out.println("全権限を付与");
    }
}

class LimitedPermissionStrategy implements RoleStrategy {
    public void assignPermissions() {
        System.out.println("制限付き権限を付与");
    }
}

class UnknownPermissionStrategy implements RoleStrategy {
    public void assignPermissions() {
        System.out.println("不明な権限");
    }
}
Java

3. enumに戦略を紐付け

enum Role {
    ADMIN(new FullPermissionStrategy()),
    SUPERUSER(new FullPermissionStrategy()),
    USER(new LimitedPermissionStrategy()),
    GUEST(new LimitedPermissionStrategy());

    private final RoleStrategy strategy;

    Role(RoleStrategy strategy) {
        this.strategy = strategy;
    }

    public void execute() {
        strategy.assignPermissions();
    }
}
Java

4. 利用側

public class Main {
    public static void main(String[] args) {
        Role.ADMIN.execute();     // 全権限を付与
        Role.USER.execute();      // 制限付き権限を付与

        // 未知の権限はenumに存在しないため、コンパイル時に防げる!
        // Role.UNKNOWN は存在しないので安全
    }
}
Java

解説

  • switch不要:enumに戦略を直接紐付けることで、呼び出し側は role.execute() だけで済む。
  • 型安全:存在しない権限はコンパイル時に防げる。
  • 拡張性:新しい権限を追加する場合は enum 定義に1行追加するだけ。
  • 責務分離:処理は戦略クラスに分けられているのでテストしやすい。

まとめ

  • 戦略パターン → 責務分離、拡張性が高い。
  • enum+戦略パターン → 型安全性も確保でき、状態管理に最適。
  • 実務では「ステータス管理」「権限管理」「ログレベル」などで特に有効。

👉 ここまでで「switch → 戦略パターン → enum+戦略パターン → Map+ラムダ」と進化の流れを一通り体験しました。

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