Рубрики
Без рубрики

Модель состояния

Разрешить объекту изменять свое поведение при изменении его внутреннего состояния. Объект появится перед вами… Помеченный шаблонами проектирования, java, шаблоном, поведенческим.

Разрешить объекту изменять свое поведение при изменении его внутреннего состояния. Объект, по-видимому, изменит свой класс.

  • Контекст: определяет интерфейс, представляющий интерес для клиентов, Поддерживает экземпляр подкласса 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”