STATE
• Permite que un objeto modifique su
comportamiento cada vez que cambie su
estado interno. Parecerá que cambia la clase
del objeto
• Desacoplar el estado de la clase en cuestión
• Implementar distintos métodos según un
estado de un atributo
• Cada subclase implementa el
comportamiento asociado con un estado del
contexto.
DISEÑO DE SISTEMAS
STATE: ESTRUCTURA
DISEÑO DE SISTEMAS
STATE: ESTRUCTURA
• Contexto
define la interfaz de interés para los clientes
mantiene una instancia de una subclase
ConcreteState que define el estado actual.
• Estado
define una interfaz para encapsular el
comportamiento asociado con un estado particular
de la Contexto.
• Estado concreto
cada subclase implementa un comportamiento
asociado con un estado de Contexto
DISEÑO DE SISTEMAS
STATE
Imaginemos que vamos a un banco y cuando
llegamos nos colocamos en la fila de mostrador: si
la misma esta abierta, seguiremos en la fila. En
cambio, si esta cerrada nos colocaremos en otra fila
o tomaremos alguna decisión acorde. Por otro lado,
si vemos un cartel que dice "enseguida vuelvo"
quizás tenemos que contemplar el tiempo
disponible que tenemos. Es decir, para nosotros, el
comportamiento de un banco cambia radicalmente
según el estado en el que se encuentre. Para estas
ocasiones, es ideal el uso de un patrón de estados.
DISEÑO DE SISTEMAS
STATE
Las subclases de estado que implementan el
método atende()
DISEÑO DE SISTEMAS
STATE
DISEÑO DE SISTEMAS
STATE
El diagrama de clases por ahora…
class Patron State
Persona
Ventanilla
«interface»
Estado Ventanilla
+ atende(Persona) : void
Estado Ventanilla Estado Ventanilla
Estado Ventanilla
Abierta Cerrada
Suspendida
+ atende(Persona) : void + atende(Persona) : void
+ atende(Persona) : void
DISEÑO DE SISTEMAS
STATE
La implementación del estado (creación de
instancia del estado que corresponda) es
dependiendo del estado.
Y la clase Ventanilla (Context) tiene una
variable de Estado del tipo de la interface.
DISEÑO DE SISTEMAS
STATE
Otra aplicación:
DISEÑO DE SISTEMAS