【ステートパターン】

Stateパターン とは?

💡 状態ごとにキャラが変わる「変身ヒーロー」パターン
📌 このページのポイント
Stateパターン:状態ごとに振る舞いが変わる Context currentState StateA:待機中 handle() → 受付開始 次 → StateB StateB:処理中 handle() → 処理実行 次 → StateC StateC:完了 handle() → 結果返却 次 → StateA Contextは状態クラスへの参照を切り替えるだけ。if文不要。 例:自動販売機・信号機・注文管理システム
Stateパターン:状態をクラスで表現し、状態遷移を明示的に管理する
ひよこ ひよこ

Stateパターンって、状態を管理するパターンなの?

ペンギン先生 ペンギン先生

そうだよ!オブジェクトの「状態」をクラスとして表現して、状態によって振る舞いを切り替えるパターンだよ。例えば自動販売機で「待機中」「お金投入済み」「売り切れ」で動きが違うよね。

ひよこ ひよこ

普通はif文で状態を切り替えるんじゃないの?

ペンギン先生 ペンギン先生

それだと状態が増えるたびにif/switch分岐が膨れ上がってしまうんだ。Stateパターンは状態ごとにクラスを作るから、新しい状態を追加しても既存のコードをほぼ変えなくていいよ。

ひよこ ひよこ

状態クラスを切り替えるのはどうするの?

ペンギン先生 ペンギン先生

コンテキスト(文脈)オブジェクトが現在の状態クラスへの参照を持つんだ。状態遷移が起きたら、参照先を別の状態クラスに差し替えるだけだよ。呼び出し側は状態の変化を意識しなくていいんだ。

ひよこ ひよこ

StrategyパターンとStateパターン、似てない?

ペンギン先生 ペンギン先生

構造はほぼ同じなんだ!違いは「目的」と「遷移の管理」だよ。Strategyは外部からアルゴリズムを切り替えるもので、Stateはオブジェクト自身が状態に応じて振る舞いを変え、かつ次の状態への遷移も自分で管理するんだ。

ひよこ ひよこ

どんな場面でよく使われるの?

ペンギン先生 ペンギン先生

信号機・自動販売機・ゲームのキャラクターAI・注文管理システム(未確認→確認済→発送済→完了)など、明確な状態遷移がある設計に向いているよ。有限状態機械(FSM)をオブジェクト指向で実装する代表的な方法なんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Stateパターン」って出てきたら「状態ごとに振る舞いを変えるクラス構成のパターン」と思えればだいたいOK!
📖 おまけ:英語の意味
「State Pattern」 = ステートパターン
💬 「State(状態)」をそのままクラスにしたGoFのデザインパターンだよ。信号機・自動販売機・ゲームのキャラクター状態管理など、明確な状態遷移がある場面でよく使われるんだよ
← 用語集にもどる