Разрешить объекту изменять свое поведение при изменении его внутреннего состояния. Объект, по-видимому, изменит свой класс.
- Контекст: определяет интерфейс, представляющий интерес для клиентов, Поддерживает экземпляр подкласса ConcreteState, который определяет текущее состояние.
- Состояние: определяет интерфейс для инкапсуляции поведения, связанного с определенным состоянием контекста.
- Конкретное состояние: каждый подкласс реализует поведение, связанное с состоянием контекста
public class Main { public static void main(String[] args) { Context c = new Context(new ConcreteStateA()); c.request(); c.request(); c.request(); c.request(); } } public interface State { void handle(Context context); } public class ConcreteStateA implements State { @Override public void handle(Context context) { context.setState(new ConcreteStateB()); } } public class ConcreteStateB implements State { @Override public void handle(Context context) { context.setState(new ConcreteStateA()); } } public class Context { private State state; public Context(State state) { setState(state); } public State getState() { return state; } public void setState(State state) { this.state = state; System.out.println("State: " + state.getClass().getSimpleName()); } public void request() { state.handle(this); } }
State: ConcreteStateA State: ConcreteStateB State: ConcreteStateA State: ConcreteStateB State: ConcreteStateA
eidherjulian61/дизайн-шаблоны
Основные шаблоны Проектирования
ид ・ 27 сентября ・ 1 минута чтения
Оригинал: “https://dev.to/eidher/state-pattern-3kki”