Java | フォールスルーを使わないで同じ挙動を実現するリファクタ例

Java Java
スポンサーリンク

では、switch(フォールスルー)と戦略パターンの処理順の違いを、矢印付き ASCII フローで可視化します。


1. フォールスルー switch の処理順(ADMIN の場合)

userType = "ADMIN"
        │
        ▼
 ┌───────────────┐
 │ switch開始                │
 └───────────────┘
        │
        ▼
 ┌───────────────┐
 │ case "ADMIN"             │
 └───────────────┘
        │
        ▼
notifyAdmin()   ← ADMIN 特有の処理
        │
        ▼
        ┌───────────────┐
        │ フォールスルー             │
        │ case "USER"              │
        └───────────────┘
        │
        ▼
showMenu()      ← ADMIN も USER も共通処理
        │
        ▼
 ┌───────────────┐
 │ switch終了                │
 └───────────────┘

💡 特徴

  • ADMINnotifyAdmin() → showMenu() と順に実行
  • フォールスルーで処理が「意図的に下の case に流れている」

2. 戦略パターンの処理順(ADMIN の場合)

userType = "ADMIN"
        │
        ▼
 ┌─────────────────────────┐
 │ UserFactory.getStrategy                    │
 └─────────────────────────┘
        │
        ▼
 ┌───────────────┐
 │ AdminUser                │
 └───────────────┘
        │
        ▼
 ┌─────────────────────────┐
 │ AdminUser.execute()                        │
 │ 1) notifyAdmin()                           │
 │ 2) showMenu()                              │
 └─────────────────────────┘
        │
        ▼
 ┌───────────────┐
 │ 処理終了                  │
 └───────────────┘

💡 特徴

  • フォールスルーはなく、execute() 内で順序を明示
  • Main では strategy.execute() の一行だけで処理完了
  • 誰が読んでも 処理順序が明確

比較まとめ(フロー視点)

項目フォールスルー switch戦略パターン
処理順の明確さ下の case に流れるため、意図を知る必要ありexecute 内に処理順が完結して明確
コードの集中度switch 文に全ての処理が集約各クラスで処理を分散
拡張性新しいケース追加で switch を修正新しい戦略クラス追加で完結
バグリスクbreak 忘れで意図せぬ処理が走るフォールスルーなしで安全

💡 ポイント:

  • フォールスルーは「短く簡単な処理で便利」
  • 戦略パターンは「可読性・保守性・テスト容易性」を優先する場合に最適
  • 大規模システムや長期運用のコードは 戦略パターン推奨
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました