Sobes.tech
Junior — Middle

Pode explicar o conceito do padrão State e como ele é usado na programação orientada a objetos?

sobes.tech IA

Resposta da IA

O padrão State permite que um objeto altere o seu comportamento dependendo do seu estado interno, mudando a classe de estado durante a execução. Isso ajuda a evitar grandes operadores condicionais e torna o código mais flexível e extensível.

Na programação orientada a objetos, para implementar o padrão State, cria-se uma interface base de estado e várias classes concretas de estado. O contexto (o objeto principal) mantém uma referência ao estado atual e delega chamadas a ele.

Exemplo em Java:

interface State {
    void handle(Context context);
}

class ConcreteStateA implements State {
    public void handle(Context context) {
        System.out.println("Estado A lidando com a solicitação.");
        context.setState(new ConcreteStateB());
    }
}

class ConcreteStateB implements State {
    public void handle(Context context) {
        System.out.println("Estado B lidando com a solicitação.");
        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);
    }
}

// Uso:
Context context = new Context(new ConcreteStateA());
context.request(); // Estado A lidando com a solicitação.
context.request(); // Estado B lidando com a solicitação.

Dessa forma, o comportamento do objeto muda dinamicamente ao alterar o estado.