ここまで「switch → 戦略パターン → Map+ラムダ」と進めてきましたが、さらに enum+戦略パターン に進化させると、型安全性と拡張性が一気に高まります。
例:ユーザー権限判定(enum+戦略)
1. 戦略インターフェース
interface RoleStrategy {
void assignPermissions();
}
Java2. 具体的な戦略クラス
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("不明な権限");
}
}
Java3. 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();
}
}
Java4. 利用側
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+ラムダ」と進化の流れを一通り体験しました。


