State Pattern - lenoryv/Design-Patterns GitHub Wiki

Patrón State en Kotlin

El comportamiento de un objeto monolítico es una función de su estado y debe cambiar su comportamiento en tiempo de ejecución dependiendo de ese estado. O bien, una aplicación se caracteriza por declaraciones de casos grandes y numerosas que vectorizan el flujo de control en función del estado de la aplicación.

El patrón de diseño State (de estado), se utiliza cuando un objeto cambia su comportamiento en función de su estado interno.

El patrón State no especifica dónde se definirán las transiciones de estado. Las opciones son dos: el objeto "context" o cada clase derivada de estado individual. La ventaja de la última opción es la facilidad de agregar nuevas clases derivadas de State. La desventaja es que cada clase derivada del estado tiene conocimiento de (acoplarse a) sus hermanos, lo que introduce dependencias entre subclases.

Un enfoque basado en tablas para diseñar máquinas de estados finitos hace un buen trabajo al especificar las transiciones de estado, pero es difícil agregar acciones para acompañar las transiciones de estado. El enfoque basado en patrones utiliza código (en lugar de estructuras de datos) para especificar las transiciones de estado, pero hace un buen trabajo al acomodar las acciones de transición de estado.

Estructura del patron State

La interfaz de la máquina de estado está encapsulada en la clase "envoltorio" (wrapper). La interfaz de la jerarquía de wrappee refleja la interfaz del wrapper con la excepción de un parámetro adicional. El parámetro adicional permite que las clases derivadas de wrappee vuelvan a llamar a la clase contenedora según sea necesario. La complejidad que, de otro modo, arrastraría hacia abajo a la clase contenedora, está perfectamente compartimentada y encapsulada en una jerarquía polimórfica a la que delega el objeto contenedor.

Context: Se refiere a la interfaz State para realizar un comportamiento específico del estado (state.operation()) y es independiente de cómo se implementa el comportamiento. Mantiene una referencia (state) a su Stateobjeto actual.

State: Para todos los estados posibles, define una interfaz común para realizar un comportamiento específico del estado.

State1, State2: Implemente la Stateinterfaz para cada estado.