先ほどの「ユーザー種別ごとの処理」を戦略パターンで整理した例を ASCII UML クラス図 で図解します。
+----------------+
| UserStrategy | <<interface>>
+----------------+
| +execute() |
+----------------+
^
|
------------------------------------------
| | |
+-----------+ +------------+ +-----------+
| AdminUser | | NormalUser | | GuestUser |
+-----------+ +------------+ +-----------+
| +execute()| | +execute() | | +execute()|
+-----------+ +------------+ +-----------+
| | |
| | |
+------------------+----------------------+
|
+----------------+
| UserFactory |
+----------------+
| +getStrategy() |
+----------------+
説明
- UserStrategy
- 「戦略のインターフェース」
execute()メソッドを定義- これを使うことで、ユーザー種別ごとの処理を統一的に扱える
- AdminUser / NormalUser / GuestUser
- 各ユーザー種別ごとの具象クラス
execute()を実装して、それぞれの処理を定義- AdminUser は共通処理(ログ) + メニュー表示
- NormalUser はメニュー表示のみ
- GuestUser はゲスト用メニュー表示
- UserFactory
- ユーザー種別の文字列に応じて適切な戦略オブジェクトを返す
switchはここだけに集約されるため、メイン処理はswitchなしで戦略呼び出しだけ
- Main
UserStrategy strategy = UserFactory.getStrategy(userType);strategy.execute();で、ユーザー種別ごとの処理を呼び出せる- これにより switch + フォールスルー を完全に置き換え可能
💡 ポイント
- フォールスルーで「ADMIN → USER」処理を順にやっていた部分は、AdminUser 内で
execute()にまとめられます。 - 拡張したい場合は、新しいユーザークラスを作るだけで対応できるため保守性が高い。
- UMLをASCIIで描くと、クラス間の関係が文字だけでも一目で理解できる。
