Padrões de projeto - padrão de estado
No padrão State, o comportamento de uma classe muda com base em seu estado. Este tipo de padrão de design está incluído no padrão de comportamento.
No padrão State, criamos objetos que representam vários estados e um objeto de contexto cujo comportamento varia conforme seu objeto de estado muda.
Implementação
Vamos criar uma interface State definindo uma ação e classes de estado concreto implementando a interface State . Contexto é uma classe que carrega um Estado.
StatePatternDemo , nossa classe de demonstração, usará objetos Context e state para demonstrar a mudança no comportamento do Context com base no tipo de estado em que ele se encontra.
Passo 1
Crie uma interface.
State.java
public interface State {
public void doAction(Context context);
}
Passo 2
Crie classes concretas implementando a mesma interface.
StartState.java
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";
}
}
StopState.java
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";
}
}
etapa 3
Crie uma classe de contexto .
Context.java
public class Context {
private State state;
public Context(){
state = null;
}
public void setState(State state){
this.state = state;
}
public State getState(){
return state;
}
}
Passo 4
Use o contexto para ver a mudança no comportamento quando o estado muda.
StatePatternDemo.java
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());
}
}
Etapa 5
Verifique a saída.
Player is in start state
Start State
Player is in stop state
Stop State