Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Patrones de Diseño de Comportamiento

State

Cambiar comportamiento según estado

Universidad Nacional de Rio Negro - Sede Andina

Definición

El patrón State (Estado) es un patrón de diseño de comportamiento que permite que un objeto altere su comportamiento cuando su estado interno cambia. El objeto parecerá haber cambiado su clase.

Este patrón propone crear nuevas clases para cada estado posible de un objeto y extraer todos los comportamientos específicos de esos estados a dichas clases.

Origen e Historia

Formalizado por el GoF en 1994, el patrón State es una aplicación de la orientación a objetos para implementar Máquinas de Estados Finitos (FSM). Antes de su formalización, la lógica de estados solía gestionarse mediante gigantescas estructuras switch o if-else que se volvían imposibles de mantener a medida que se añadían nuevos estados o transiciones.

Motivación

La motivación principal es la cohesión. Queremos evitar que una sola clase contenga la lógica de todos los estados posibles del sistema. Al separar cada estado en su propia clase, el código se vuelve más legible, fácil de testear y extensible.

Contexto

Cuando aplica

Cuando no aplica

Consecuencias de su uso

Positivas

Negativas

Alternativas

Estructura

Diagramas

Diagrama de Clases

Diagrama de Secuencia

Ejemplos

/**
 * Interfaz para los estados.
 */
public interface EstadoSemaforo {
    void mostrar(Semaforo s);
}

/**
 * Estado concreto: Rojo.
 */
public class EstadoRojo implements EstadoSemaforo {
    @Override
    public void mostrar(Semaforo s) {
        System.out.println("🔴 ROJO: Pare");
        // Lógica de transición
        s.setEstado(new EstadoVerde());
    }
}

/**
 * El Contexto.
 */
public class Semaforo {
    private EstadoSemaforo actual = new EstadoRojo();
    
    public void setEstado(EstadoSemaforo e) { this.actual = e; }
    
    public void cambiar() {
        actual.mostrar(this);
    }
}

Ejercicios

Resumen

El patrón State es la solución elegante a la complejidad de las máquinas de estado. Al transformar los estados en objetos, logramos un diseño donde el comportamiento es una propiedad dinámica y polimórfica, permitiendo que los objetos evolucionen de forma fluida y organizada a lo largo de su ciclo de vida.

Próximo paso

Para seguir, conviene pasar a el material siguiente, donde el recorrido continúa sobre esta base.