java のステートパターンを実装する方法
ステートパターンをJavaで実装するには、次の手順に従います。
- 状態インターフェース定義:すべての状態クラスが共有するメソッドを含む、状態インターフェースを作成します。
public interface State {
void doAction(Context context);
}
- 状態を具体化する:状態インターフェースを実装した複数の具体的な状態クラスを作成し、具体的なニーズに応じて対応するメソッドを実装します。
public class StartState implements State {
public void doAction(Context context) {
System.out.println("Player is in start state");
context.setState(this);
}
public String toString() {
return "Start State";
}
}
public class StopState implements State {
public void doAction(Context context) {
System.out.println("Player is in stop state");
context.setState(this);
}
public String toString() {
return "Stop State";
}
}
- 状態オブジェクトを含んだコンテキストクラスを定義して、状態の設定と実行のメソッドを外部に提供
public class Context {
private State state;
public void setState(State state) {
this.state = state;
}
public State getState() {
return state;
}
public void doAction() {
state.doAction(this);
}
}
- 状態パターンをテストする: 状態パターンの使用方法をテストするためにテストクラスを作成します。
public class StatePatternDemo {
public static void main(String[] args) {
Context context = new Context();
StartState startState = new StartState();
startState.doAction(context);
System.out.println(context.getState().toString());
StopState stopState = new StopState();
stopState.doAction(context);
System.out.println(context.getState().toString());
}
}
上記の手順に従うことで、Javaで状態パターンを実装できます。状態パターンは、オブジェクトが異なる状態において異なる振る舞いをすることを可能にし、同時に新しい状態クラスを追加することも容易になります。