モード状態(状態パターン)、クラスの振る舞いは、その状態変化に基づいています。デザインパターンのこのタイプは、行動パターンを属します。
状態モデルでは、我々は、オブジェクトの状態が変更されるように、コンテキストオブジェクトは、様々なオブジェクトの挙動と変化の様子を表して作成します。
意図は:内部状態が変更されたときにオブジェクトがその動作を変更することができ、オブジェクトは、そのクラスを変更するように見えます。
主液:オブジェクトの挙動は、その状態(性質)に依存し、そしてそれに関連する状態に基づいて動作を変更するために変更されてもよいです。
ときに使用する:コードは、オブジェクトの状態に関する条件文の数が含まれています。
解決方法:特定の状態クラスの抄録の様々な。
キーコード:インターフェイスは、通常モードを指示している唯一の方法。界面準モードの一つ以上の間。さらに、クラスのメソッド実装状態モード、通常の戻り値、またはインスタンス変数の値を変更します。換言すれば、状態およびオブジェクトモデルの状態は、一般的に関連しています。実装クラスのメソッドは、インターフェースを被覆する方法が異なる機能を有します。ステート・モードと同じコマンド・モードは、他の条件であれば...他の選択文を排除するために使用することができます。
応用例: 1、バスケットボールの選手を再生するには、通常の異常や異常な状態のステータスを持っています。2、編鐘は、「クロックA」「クロックは、抽象インタフェースである」等は、具体的な状態、「編鐘「特定の環境(コンテキスト)です。
利点: 1、変換ルールパッケージ。2、可能な状態を列挙し、我々は列挙する前の状態にある種のステータスを確認する必要があります。3、クラスに状態関連の振る舞いを持つすべての、あなたは簡単に新しい状態を追加することができますが、唯一のオブジェクトの動作を変更することができ、オブジェクトの状態を変更する必要があります。図4は、むしろ一つの巨大な条件文ブロックよりも、いずれかのオブジェクトの状態遷移論理状態を可能にします。図5は、環境は、複数のオブジェクトが、それによって、システム内のオブジェクトの数を減らす、状態オブジェクトを共有することができます。
短所: 1、状態モデル系を使用して、必然的にクラスとオブジェクトの数を増加させます。図2は、構造及び状態モデルの実装では、混同構造とプログラムのコードをもたらす誤っ使用される場合、より複雑です。3、「開閉原則」の状態モードのサポートは、モードの状態のための非常に良いではありませんが、新しいクラスを追加し、状態を切り替えることができる状態遷移の責任者のソースコードのステータスを変更する必要がある、または新しい状態に切り替え、変更することはできません。クラスに対応するクラスの動作状態は、ソースコードを変更する必要があります。
使用シナリオ: 1、状態によっては、行動や場面の変更を変更します。2、条件、代わりのswitch文によります。
注:これ以上5以下の使用状態モードの動作は状態によって制約、および状態。
State.java
パブリックインターフェース状態{//インタフェース作成
公共ボイドのdoAction(コンテキスト・コンテキスト);
}
Context.java
パブリッククラスコンテキスト{//创建类コンテキスト
プライベート州状態。
公共コンテキスト(){
状態=ヌル。
}
公共ボイドSETSTATE(ステート状態){
this.state =状態。
}
公共状態getStateを(){
状態を返します。
}
}
StartState.java
パブリッククラスSTARTSTATEは、国が{//インターフェイスを実装エンティティクラスを作成して実装し
ます。public voidをのdoAction(コンテキストコンテキスト){
; System.out.printlnは( "プレイヤーは、スタート状態にある")
context.setState(この);
}
パブリック文字列のtoString() {
戻り「スタート状態」;
}
}
StopState.java
パブリッククラスStopStateは州立{実装
公共ボイドのdoAction(コンテキストコンテキスト){
System.out.printlnは(「プレーヤーが停止状態にある」という。);
context.setState(この);
}
パブリック文字列のtoString(){
戻り「停止状態」。
}
}
StatePatternDemo.java
パブリッククラスStatePatternDemo {//コンテキスト状態変化挙動状態に確認してください変更
のpublic static無効メイン(文字列[] args){
コンテキストコンテキストは=新しい新しいコンテキスト();
STARTSTATE(=新しい新STARTSTATE)のSTARTSTATEプロパティ;
startState.doAction(コンテキスト) ;
のSystem.out.println(context.getState()のtoString());
stopState stopState新しい新しいstopState =();
stopState.doAction(コンテキスト)
のSystem.out.println(context.getState()のtoString())。
}
}