Java 状態パターン (状態パターン) はオブジェクト指向の設計パターンであり、オブジェクトの状態を独立した状態オブジェクトにカプセル化し、オブジェクトの動作を状態オブジェクトから切り離します。内部状態が変化したときにオブジェクトの動作を変更するパターンです。このパターンは、すべての動作を 1 つのクラスに入れるのではなく、オブジェクトの動作をさまざまな状態オブジェクトにカプセル化します。
Java 状態パターン 一般的な業界は次の 3 つの役割で構成されています:
State Interface (State Interface): さまざまな状態の特定のオブジェクトによって実装される、コンテキスト オブジェクトに関連する一連のメソッドを定義します。
#具体的な状態: 状態インターフェイスを実装し、特定の状態オブジェクトは別の状態の実装です。public interface State { /** * 移动 */ void move(); /** * 攻击 */ void attack(); }特定の状態
public class IdleState implements State{ /** * 移动 */ @Override public void move() { System.out.println("静止状态下不能移动..."); } /** * 攻击 */ @Override public void attack() { System.out.println("静止状态下不能攻击..."); } } public class MoveState implements State{ /** * 移动 */ @Override public void move() { System.out.println("移动中..."); } /** * 攻击 */ @Override public void attack() { System.out.println("移动状态下不能攻击..."); } } public class AttackState implements State{ /** * 移动 */ @Override public void move() { System.out.println("攻击状态下不能移动..."); } /** * 攻击 */ @Override public void attack() { System.out.println("攻击中..."); } }コンテキスト
public class Context { private State state; public Context() { // 默认静止状态 this.state = new IdleState(); } public void setState(State state) { this.state = state; } /** * 移动 */ public void move() { state.move(); } /** * 攻击 */ public void attack() { state.attack(); } }Test
public class Demo { public static void main(String[] args) { // 静止状态 Context context = new Context(); context.move(); context.attack(); // 移动状态 context.setState(new MoveState()); context.move(); context.attack(); // 攻击状态 context.setState(new AttackState()); context.move(); context.attack(); } }
上記の例では、最初に State インターフェイスを定義し、次に 3 つの特定の状態クラス IdleState 、 MoveState 、および AttackState を定義し、それぞれ主人公のアイドル状態を表します。移動状態と攻撃状態。これらの状態はすべて State インターフェイスを実装します。次に、現在の状態を表す State オブジェクトを含むコンテキスト Context を定義します。Context クラスで、状態を変更するための setState メソッドを定義します。対応する操作を実行するための攻撃メソッド。
概要利点 状態モードを使用すると、状態を簡単に追加できます。新しい状態クラスを追加するだけです。 .#状態モードは、状態遷移ロジックを状態クラスにカプセル化することによってオブジェクトの状態を作成します。変更はより明瞭で明確です。
状態モードを使用すると、状態の切り替えが簡単になります。オブジェクトの状態遷移メソッドを呼び出すだけです。
欠点
状態モードにより状態の切り替えが発生する可能性があります。プロセスが複雑になります。
# #アプリケーション シナリオ
状態パターンは、オブジェクトがその状態に基づいてさまざまな操作を実行する必要がある場合に非常に役立ちます。
オブジェクトに新しい動作を動的に追加する必要がある場合、状態パターンは良い選択です。
一般的なアプリケーション シナリオには、注文ステータス、ユーザー ログイン ステータス、ゲーム ステータスなどが含まれます。
以上がJava 状態設計パターンを使用してオブジェクトの状態遷移を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。