【ステートパターン】
Stateパターン とは?
💡 状態ごとにキャラが変わる「変身ヒーロー」パターン
📌 このページのポイント
Stateパターンって、状態を管理するパターンなの?
そうだよ!オブジェクトの「状態」をクラスとして表現して、状態によって振る舞いを切り替えるパターンだよ。例えば自動販売機で「待機中」「お金投入済み」「売り切れ」で動きが違うよね。
普通はif文で状態を切り替えるんじゃないの?
それだと状態が増えるたびにif/switch分岐が膨れ上がってしまうんだ。Stateパターンは状態ごとにクラスを作るから、新しい状態を追加しても既存のコードをほぼ変えなくていいよ。
状態クラスを切り替えるのはどうするの?
コンテキスト(文脈)オブジェクトが現在の状態クラスへの参照を持つんだ。状態遷移が起きたら、参照先を別の状態クラスに差し替えるだけだよ。呼び出し側は状態の変化を意識しなくていいんだ。
StrategyパターンとStateパターン、似てない?
どんな場面でよく使われるの?
信号機・自動販売機・ゲームのキャラクターAI・注文管理システム(未確認→確認済→発送済→完了)など、明確な状態遷移がある設計に向いているよ。有限状態機械(FSM)をオブジェクト指向で実装する代表的な方法なんだ。
まとめ:ざっくりこれだけ覚えればOK!
「Stateパターン」って出てきたら「状態ごとに振る舞いを変えるクラス構成のパターン」と思えればだいたいOK!
📖 おまけ:英語の意味
「State Pattern」 = ステートパターン
💬 「State(状態)」をそのままクラスにしたGoFのデザインパターンだよ。信号機・自動販売機・ゲームのキャラクター状態管理など、明確な状態遷移がある場面でよく使われるんだよ