State は、 振る舞いに関するデザインパターンの一つで、 オブジェクトの内部状態が変化した時にその振る舞いを変更することを可能とします。
このパターンは、 状態に関連した振る舞いを個別の状態のクラスへ抽出し、 元のオブジェクトが作業を自分で行わず、 これらのクラスのインスタンスに委任することを強制します。
複雑度:
人気度:
使用例: Java では、 State パターンは、 膨大な数の switch
文に基づく状態機械をオブジェクトに変換する時によく使われます。
Java のコア・ライブラリーでの State パターンの使用例です:
見つけ方: オブジェクトが、 その外的に制御される状態によって振る舞いを変えるようなメソッドを持っていたら、 State パターンを識別できます。
メディア・プレーヤーのインターフェース
この例では、 State パターンを利用して、 同じメディア・プレーヤー・コントロールが、 現在の再生状態に応じて異なる振る舞いをします。 プレーヤーの主クラスは、 実際の仕事のほとんどをする状態オブジェクトへの参照を保持しています。 アクションの中には、 状態オブジェクトを他のものと入れ替えるものがあります。 これにより、 プレーヤーがユーザーに対応する仕方が変化します。
states
states/State.java: 共通の状態インターフェース
states/LockedState.java
states/ReadyState.java
states/PlayingState.java
ui
ui/Player.java: プレーヤーの主クラス
ui/UI.java: プレーヤーの GUI
Demo.java: 初期化コード
OutputDemo.png: スクリーン・ショット