Permite a un objeto cambiar su comportamiento cuando cambia su estado interno. El objeto parecerá pertenecer a otra clase.
Aplicabilidad
- 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.

Context: es una clase cuyas instancias exponen el comportamiento de los estados. Define la interfaz para los clientes. Las instancias de la clase Context determinan su estado actual manteniendo una referencia a una instancia de una subclase concreta de la clase State. La subclase de la clase State determina el estado.
State: es la superclase de todas las clases utilizadas para representar el estado de los objetos contexto. Define una interfaz para encapsular el comportamiento asociado con un estado particular del contexto.
StateConcretoA, StateConcretoB: Estas clases son subclases concretas de la clase State. Cada subclase implementa un comportamiento asociado con un estado del contexto.
Consecuencias
- Localiza el comportamiento dependiente del estado.
- Hace explícitas las transiciones entre estados.
- Los objetos Estado pueden compartirse.
Flyweight: Se puede utilizar el patrón Flyweight para compartir objetos estado, para soportar un gran número de objetos de forma eficiente. Este patrón explica cuando y como se puede compartir un estado.
Mediator: podemos utilizar el patrón State con el patrón Mediator cuando implementamos las interfaces de usuario.
Singleton: Se pueden implementar estados utilizando el patrón Singleton.
No hay comentarios:
Publicar un comentario