では、switch(フォールスルー)と戦略パターンの処理順の違いを、矢印付き ASCII フローで可視化します。
1. フォールスルー switch の処理順(ADMIN の場合)
userType = "ADMIN"
│
▼
┌───────────────┐
│ switch開始 │
└───────────────┘
│
▼
┌───────────────┐
│ case "ADMIN" │
└───────────────┘
│
▼
notifyAdmin() ← ADMIN 特有の処理
│
▼
┌───────────────┐
│ フォールスルー │
│ case "USER" │
└───────────────┘
│
▼
showMenu() ← ADMIN も USER も共通処理
│
▼
┌───────────────┐
│ switch終了 │
└───────────────┘
💡 特徴
ADMINは notifyAdmin() → 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 忘れで意図せぬ処理が走る | フォールスルーなしで安全 |
💡 ポイント:
- フォールスルーは「短く簡単な処理で便利」
- 戦略パターンは「可読性・保守性・テスト容易性」を優先する場合に最適
- 大規模システムや長期運用のコードは 戦略パターン推奨
