Sobes.tech
Junior — Middle

Можете ли да обясните концепцията за патърна State и как се използва в обектно-ориентираното програмиране?

sobes.tech AI

Отговор от AI

Моделът State позволява на обект да променя поведението си в зависимост от вътрешното си състояние, като променя класа на състоянието по време на изпълнение. Това помага да се избегнат големи условни оператори и да се направи кодът по-гъвкав и разширяем.

В обектно-ориентираното програмиране, за реализиране на модела State се създава базов интерфейс за състояние и няколко конкретни класа за състояния. Контекстът (основният обект) държи препратка към текущото състояние и делегира извикванията към него.

Пример на Java:

interface State {
    void handle(Context context);
}

class ConcreteStateA implements State {
    public void handle(Context context) {
        System.out.println("Състояние A обработва заявката.");
        context.setState(new ConcreteStateB());
    }
}

class ConcreteStateB implements State {
    public void handle(Context context) {
        System.out.println("Състояние B обработва заявката.");
        context.setState(new ConcreteStateA());
    }
}

class Context {
    private State state;

    public Context(State state) {
        this.state = state;
    }

    public void setState(State state) {
        this.state = state;
    }

    public void request() {
        state.handle(this);
    }
}

// Използване:
Context context = new Context(new ConcreteStateA());
context.request(); // Състояние A обработва заявката.
context.request(); // Състояние B обработва заявката.

По този начин поведението на обекта се променя динамично при смяна на състоянието.