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

Java Java
スポンサーリンク

先ほどの「ユーザー種別ごとの処理」を戦略パターンで整理した例を ASCII UML クラス図 で図解します。


               +----------------+
               |  UserStrategy  |  <<interface>>
               +----------------+
               | +execute()     |
               +----------------+
                       ^
                       |
    ------------------------------------------
    |                  |                     |
+-----------+       +------------+        +-----------+
| AdminUser |       | NormalUser |        | GuestUser |
+-----------+       +------------+        +-----------+
| +execute()|       | +execute() |        | +execute()|
+-----------+       +------------+        +-----------+
    |                  |                      |
    |                  |                      |
    +------------------+----------------------+
                       |
               +----------------+
               |  UserFactory   |
               +----------------+
               | +getStrategy() |
               +----------------+

説明

  1. UserStrategy
    • 「戦略のインターフェース」
    • execute() メソッドを定義
    • これを使うことで、ユーザー種別ごとの処理を統一的に扱える
  2. AdminUser / NormalUser / GuestUser
    • 各ユーザー種別ごとの具象クラス
    • execute() を実装して、それぞれの処理を定義
    • AdminUser は共通処理(ログ) + メニュー表示
    • NormalUser はメニュー表示のみ
    • GuestUser はゲスト用メニュー表示
  3. UserFactory
    • ユーザー種別の文字列に応じて適切な戦略オブジェクトを返す
    • switch はここだけに集約されるため、メイン処理は switch なしで戦略呼び出しだけ
  4. Main
    • UserStrategy strategy = UserFactory.getStrategy(userType);
    • strategy.execute(); で、ユーザー種別ごとの処理を呼び出せる
    • これにより switch + フォールスルー を完全に置き換え可能

💡 ポイント

  • フォールスルーで「ADMIN → USER」処理を順にやっていた部分は、AdminUser 内で execute() にまとめられます。
  • 拡張したい場合は、新しいユーザークラスを作るだけで対応できるため保守性が高い。
  • UMLをASCIIで描くと、クラス間の関係が文字だけでも一目で理解できる。
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました