Javaのデザインパターンの一つである状態パターンの実装方法は何ですか?
ステートパターンは、オブジェクトが内部の状態を変更したときにその行動を変更できるようにする行動デザインパターンです。ステートパターンでは、オブジェクトの行動はその状態によって決定されます。
以下は簡単なステートパターンの実装手順です。
- オブジェクトの振る舞いメソッドを宣言する状態インターフェース(State)を定義します。
- 具体状態クラスは、状態インターフェースを実装し、各具体状態クラスは状態インターフェースのメソッドを実装しています。
- 文脈内で状態オブジェクトを保持し、異なる状態に切り替えることができます。
- コンテキストクラス内で、状態を切り替えるためのメソッド(たとえばsetState)を提供します。
- 現在の状態に応じて、適切な行動方法を呼び出す。
以下は簡単なJavaコードの実装です:
// 定义状态接口
interface State {
void doAction(Context context);
}
// 实现具体状态类
class StartState implements State {
public void doAction(Context context) {
System.out.println("Player is in start state");
context.setState(this);
}
}
class StopState implements State {
public void doAction(Context context) {
System.out.println("Player is in stop state");
context.setState(this);
}
}
// 上下文类
class Context {
private State state;
public Context() {
state = null;
}
public void setState(State state) {
this.state = state;
}
public State getState() {
return state;
}
}
// 测试代码
public class StatePatternDemo {
public static void main(String[] args) {
Context context = new Context();
StartState startState = new StartState();
startState.doAction(context);
StopState stopState = new StopState();
stopState.doAction(context);
}
}
以上のコードを実行すると、結果は次のとおりです:
Player is in start state
Player is in stop state
上記の例では、状態インターフェースStateには、動作メソッドdoActionが定義されており、StartStateとStopStateは具体的な状態クラスであり、それぞれがdoActionメソッドを実装しています。コンテキストクラスContextは状態オブジェクトを保持し、異なる状態に切り替えることができます。テストコードでは、まずContextオブジェクトを作成し、次にStartStateオブジェクトを作成し、doActionメソッドを使用してContextオブジェクトの状態をStartStateに切り替えます。そして、StopStateオブジェクトを作成し、doActionメソッドを使用してContextオブジェクトの状態をStopStateに切り替えます。