【ステートパターン】

Stateパターン とは?

最終更新:
💡 同じ購入ボタンでも、今の状態によって返事が変わる

現在の状態に応じた動作を、状態ごとのクラスに任せる設計パターン。自動販売機の例で、処理の委譲と状態の切り替え、条件分岐との使い分けを説明します。

📌 このページのポイント
State:今の状態へ動作を任せる自動販売機(本体)現在の状態:入金済み購入処理を任せる待機入金してね○ 状態の候補入金済み商品を渡す✓ 今の状態売り切れ購入できない○ 状態の候補同じ操作でも、状態ごとに動作が変わる
現在の状態だけに購入処理を任せる例。状態を切り替える条件や遷移先は、別に設計します。
ひよこ ひよこ
Stateパターンは、どういうときに使うの?
ペンギン先生 ペンギン先生
例えば自動販売機の購入ボタンだよ。待機中なら入金を促し、入金済みなら商品を渡し、売り切れなら購入できないと伝える。同じ操作でも今の状態で動作が変わるんだ。
ひよこ ひよこ
それをどうコードで分けるの?
ペンギン先生 ペンギン先生
各状態を共通のインターフェースを持つクラスにする。本体のContextは現在の状態オブジェクトへの参照を持ち、購入の処理をその状態へ任せるよ。
ひよこ ひよこ
状態は勝手に切り替わるの?
ペンギン先生 ペンギン先生
切り替える条件や遷移先も設計が必要だよ。本体で参照を変える方法や、状態側が次の状態を知らせる方法などがある。状態を追加すると、既存の遷移も見直す場合があるんだ。
ひよこ ひよこ
if文より、いつも優れている?
ペンギン先生 ペンギン先生
単純な状態なら条件分岐で十分なこともあるよ。Stateは動作を整理する方法で、すべてのif文をなくす仕組みではない。構造が似たStrategyはアルゴリズムを選ぶ目的、Stateは内部状態に応じて動作を変える目的なんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Stateパターン」って出てきたら「今の状態のクラスに動作を任せる設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「State Pattern」 = 状態に応じて動作を切り替える設計パターン
💬 Stateは状態のこと。状態ごとの動作をオブジェクトに分け、本体が現在の状態へ処理を任せる構造です。

参考資料

← 用語集にもどる