Вы находитесь на странице: 1из 4

PATRON DE SISEO STATE

Objetivo
Encapsula los estados de un objeto como objetos separados, cada pertenencia en una subclase separada de una clase abstracta estado. Permite a un objeto cambiar su comportamiento cuando su estado interno cambia. El objeto parecer haber cambiado de clase.

Aplicabilidad
y 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 ejecucin cuando cambie su estado. y La organizacin de la lgica que maneja un estado de un objeto debera ser capaz de cambiar a muchos estados sin llegar a ser una gran cantidad de cdigo inmanejable. y Las operaciones tienen sentencias condicionales largas que dependen del estado del objeto. Este estado es representado por una constante enumerada. A menudo, varias operaciones contendrn esta misma estructura condicional. Este patrn sita 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.

Solucin
El diagrama de clases que muestra la organizacin de clases que participan en el patrn State Es el siguiente:

A continuacin estn las descripciones de los papeles que juegan las clases en la organizacin Citada anteriormente: Contexto Contexto es una clase cuyas instancias exponen el comportamiento de los estados. Define la interfaz para los clientes. Las instancias de la clase Contexto determinan su estado actual manteniendo una referencia a una instancia de una subclase concreta de la clase Estado. La subclase de la clase Estado determina el estado. Estado La clase Estado 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. EstadoConcreto1, EstadoConcreto2,.... Estas clases son subclases concretas de la clase Estado. Cada subclase implementa un comportamiento asociado con un estado del contexto. La clase Contexto delega peticiones a estados especficos al objeto EstadoConcreto actual. Un contexto se puede pasar a s mismo como argumento al objeto estado. Esto permite al objeto estado acceder al contexto si fuera necesario. La clase Contexto es la interfaz primaria para los clientes que pueden configurar un contexto con objetos estado. Una vez que se configura el contexto los clientes no tienen que trabajar directamente con el objeto estado.

Consecuencias
El cdigo para cada estado est en su propia clase. Esta organizacin hace ms fcil aadir nuevos estados definiendo nuevas clases sin consecuencias no intencionadas. Por esta razn, el patrn State funciona muy bien para pocos y muchos estados. Una alternativa al uso del patrn State es usar valores de datos para definir estados internos y tener operaciones en la clase Contexto que comprueben los datos explcitamente. Pero en este caso tendramos instrucciones condicionales en la implementacin del Contexto. Aadir un estado supondra cambiar varias operaciones que complican el mantenimiento. El patrn State evita este problema pero introduce otro, ya que distribuye el comportamiento por diferentes estados. Esto aumenta el nmero de clases y es menos compacto que una clase simple. Sin embargo esta distribucin es buena si hay muchos estados evitando sentencias condicionales largas. Estas sentencias, al igual que los mtodos largos no son deseables. Son monolticas y tienden a hacer el cdigo poco explcito lo que lo convierte en difcil de entender y modificar. El patrn State ofrece una

forma mejor de estructurar el cdigo de estados especficos. Al encapsular cada transicin de estados y acciones en una clase se eleva la idea de un estado ejecucin para todos los estados de los objetos. Hace las transiciones de estados ms explcitas. Cuando un objeto define su estado actual slo en trminos de valores de datos internos las transacciones de estado no tienen representacin explcita, sino que se muestran como asignaciones entre variables. Al introducir objetos separados para diferentes estados hace a las transacciones ms explcitas. Adems los objetos pueden proteger al Contexto de estados internos inconsistentes ya que las transiciones de estado parecen ser atmicas para los clientes del objeto estado. Un cliente llama al mtodo procesarEvento del estado actual y retorna el nuevo estado al cliente. Los objetos que representan estados no paramtricos, no instancian variables (el estado se representa en su tipo), pueden ser compartidos como singletons si no hay necesidad de crear una instancia directa de la clase Estado.

Implementacin
El patrn State no especfica quien define el criterio para las transiciones. Si el criterio es fijo puede ser implementado en el contexto. Sin embargo, es ms flexible y apropiado permitir a las subclases de la clase Estado especificar su estado sucesor y cuando se hace la transicin. Esto requiere aadir una interfaz a la clase Contexto para permitir al objeto estado poner el estado actual al contexto. Descentralizar la lgica de las transiciones hace ms fcil modificar y extender dicha lgica definiendo nuevas subclases Estado. Una desventaja de esta descentralizacin es que una subclase Estado conocer al menos una de las otras lo que introduce dependencia entre subclases. Otra forma de imponer esta estructura es usar una tabla que mapee las transiciones. La ventaja principal de las tablas es su regularidad ya que se puede modificar el criterio de transicin modificando datos en vez de cdigo. Sin embargo tiene alguna desventaja: Es menos eficiente que una llamada a una funcin, hace la transicin menos explcita y ms difcil de entender, es difcil aadir acciones para acompaar las transiciones de estados. El patrn State modela comportamientos especficos mientas que la tabla se centra en definir transiciones de estados.

Patrones relacionados Flyweight Se puede utilizar el patrn Flyweight para compartir objeto estado para soportar un gran nmero de objetos de forma eficiente. Este patrn explica cuando y como se puede compartir un estado. Mediator Puedes utilizar el patrn State con el patrn Mediator cuando implementas los interfaces de usuario. Singleton Se pueden implementar estados utilizando el patrn Singleton.

Patron State Informe: Matta Aranda Asbel Moore Cenas Fernando Rojas Ruiz Bryan Sanches Flores Luis

Вам также может понравиться