В шаблоне State поведение класса изменяется в зависимости от его состояния. Этот тип шаблона проектирования подпадает под модель поведения.
В паттерне State мы создаем объекты, которые представляют различные состояния, и объект контекста, поведение которого меняется по мере изменения его объекта состояния.
Реализация
Мы собираемся создать интерфейс State, определяющий действие и конкретные классы состояний, реализующие интерфейс State . Контекст — это класс, который несет состояние.
StatePatternDemo , наш демонстрационный класс, будет использовать объекты Context и состояния для демонстрации изменений в поведении Context в зависимости от типа состояния, в котором он находится.
Шаг 1
Создать интерфейс.
State.java
public interface State { public void doAction(Context context); }
Шаг 2
Создайте конкретные классы, реализующие тот же интерфейс.
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"; } }
Шаг 3
Создать контекстный класс.
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; } }
Шаг 4
Используйте контекст, чтобы увидеть изменения в поведении при изменении состояния.
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()); } }
Шаг 5
Проверьте вывод.