The State is one of the Behavioral design patterns, In this the behavior of a class changes based on its state.
Key concepts:
Context: Class/object whose behavior changes based on state
State: abstract state
Concrete State: representing various states, which changes the behavior of the Context class.
Let's understand this with an example:
State.java
public interface State {
public void doAction(Context context);
}
Concrete Implementation of State
public class StartState implements State {
private Context context;
public StartState(){}
@Override
public void doAction(Context context){
this.context = context;
this.context.setState(this);
System.out.println("Player is in StartState");
}
public String toString(){
return "Start State";
}
}
public class EndState implements State {
private Context context;
public EndState(){}
@Override
public void doAction(Context context){
this.context = context;
this.context.setState(this);
System.out.println("Player is in EndState");
}
public String toString(){
return "End State";
}
}
Main
public class Main {
public static void main(String args[]){
Context context = new Context();
State state = new StartState();
state.doAction(context);
//current state
System.out.println(context.getState().toString());
State state2 = new EndState();
state2.doAction(context);
//new State
System.out.println(context.getState().toString());
}
}
output:
Player is in StartState
Start State
Player is in EndState
End State
note: The above code follows ISP, LSP, SRP, OCP of solid principles
Top comments (0)