jueves, 28 de mayo de 2009

State


Nombre del patrón
State

Clasificación del patrón
De comportamiento.

También conocido como
Objetcs for States.

Motivación
Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno. Parecerá que cambia la clase del objeto.

Aplicabilidad
· Aplicaciones cuyos componentes cambian de estado de forma dinámica durante su ejecución.
· Aplicaciones con grandes condicionales dependientes del estado de un objeto.

Estructura

Participantes
Context
Define interfaz y mantiene una instancia con el estado actual
State
Define interfaz para el comportamiento asociado a un determinado estado del Contexto.
Subclases Concrete State
Cada subclase implementa el comportamiento asociado con un estado del contexto.

Consecuencias
Localiza el comportamiento dependiente del estado y divide dicho comportamiento en diferentes estados. Las transiciones entre estados no residen en sentencias if o swtich monolíticas, sino que se reparte entre las subclases.
Hace explícitas las transiciones entre estados. Introducir objetos separados para los diferentes estados hace que las transiciones sean más explícitas.
Los objetos Estado pueden compartirse.

Implementación
Al momento de implementar el patrón State debemos tener en cuenta:

  • No queda claro quien define las transiciones entre estados.
  • Una alternativa basada en tablas.
  • Crear y destruir objetos estados.
  • Usar herencia dinámica (sólo permitido en algunos lenguajes de programación (self) )

Usos Conocidos

Conexión TCP. Clase abstracta “Estado TCP” y derivan los diferentes estados de la conexión.
Herramientas de dibujo. Clase abstracta “herramienta” y derivan los diferentes tipos de herramientas.

Patrones relacionados
Flyweight
Singleton


Referencias Bibliográficas
Design Patterns Elements of Reusable Object-Oriented Software, GoF.
http://dmi.uib.es/~yuhua/APOO07-08/Presentation/Bridge-State.pdf
http://kybele.escet.urjc.es/documentos/SI/Patrones/20_State.ppt
http://www.ldc.usb.ve/~mgoncalves/IS2/sd07/grupo3.pdf

No hay comentarios:

Publicar un comentario