Cuando el contexto en el que se está desarrollando requiere que un objeto tenga diferentes comportamientos según el estado en que se encuentra, resulta complicado poder manejar el cambio de comportamientos y los estados de dicho objeto, todos dentro del mismo bloque de código. El patrón State propone una solución a esta complicación, creando básicamente, un objeto por cada estado posible del objeto que lo llama. Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución.
Nombre:
State.
También conocido como:
Objects for States.
Propósito:
Permite a un objeto alterar su comportamiento según el estado interno en que se encuentre.
Aplicabilidad:
Este patrón se utiliza generalmente cuando:
· El comportamiento de un objeto es determinado por un estado interno que cambia en respuesta a los eventos. Debe cambiar su comportamiento en tiempo de ejecución cuando cambie su estado.
· La organización de la lógica que maneja un estado de un objeto debería ser capaz de cambiar a muchos estados sin llegar a ser una gran cantidad de código inmanejable.
· Las operaciones tienen sentencias condicionales largas que dependen del estado del objeto. Este estado es representado por una constante enumerada. A menudo, varias operaciones contendrán esta misma estructura condicional. Este patrón sitúa cada rama de la sentencia condicional en una clase separada. Esto permite tratar el estado de un objeto como un objeto que puede variar de forma independiente a otros objetos.
Estructura:

Participantes:
· Context: Define la interfaz de interés para los clientes, mantiene una instancia de una subclase que define.
· State: Define una interfaz para encapsular el comportamiento asociado con un estado de Context.
· StateConcret: Cada subclase implementa el comportamiento asociado con un estado del
Context.
Consecuencias:
· Localiza el comportamiento dependiente del estado.
· Hace explícitas las transiciones entre estados.
· Los objetos Estado pueden compartirse.
Patrones relacionados:
· Flyweight.
· Mediator.
· Singleton.
Etiquetas: Behavioral Patterns, Patrones de Comportamiento, State