Разрешить объекту изменять свое поведение при изменении его внутреннего состояния. Объект, по-видимому, изменит свой класс.
- Контекст: определяет интерфейс, представляющий интерес для клиентов, Поддерживает экземпляр подкласса 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”