sábado, 30 de mayo de 2009

PATRONES_DE_COMPORTAMIENTO2

Mediator, Memento, Observer,State.


1. Mediator


Intención

Define un objeto que encapsula como interactua un conjunto de objetos. Favorece un bajo acoplamiento, liberando a los objetos de referenciarse unos a otros explícitamente, y permite variar la interacción de manera independiente.

Aplicabilidad

Use el patrón mediator cuando:
  • La comunicación de un conjunto de objetos esta bien definida pero es compleja.
  • Reusar un objeto es difícil porque este se comunica con muchos otros objetos.
  • El comportamiento distribuido entre un numero grande de clases debe ser personalizable sin muchas subclases.

Estructura
Participantes
  • Mediator: Define una interfaz para comunicarse con una objetos colegas.
  • ConcreteMediator: Implementa el comportamiento cooperativo entre los Objetos. Conoce y mantiene sus colegas.
  • Clases Collenguaje: Cada colega conoce su mediator y usa a este para comunicarse con otros colegas.


2. Memento

Intención

Sin violar la encapsulación captura y externaliza estados internos de un objeto, de modo que el objeto puede ser externalizado más tarde.

Aplicabilidad

Use el patrón memento cuando:
  • Una parte del estado de un objeto debe ser guardado para que pueda ser restaurado más tarde y
  • Una interfaz para obtener el estado de un objeto podría romper la encapsulación exponiendo detalles de

Estructura

Participantes
  • Crea el memento y lo utiliza para recordar su estado.
  • Memento: Clase interna estática de Originator, que contiene su estado. El Originator determina que datos almacenar en el memento, y sólo el originator debe ser capaz de leer el memento.
  • CareTeaker: El objeto que desea preservar su estado. Nunca necesita saber que hay en el memento; sólo necesita saber que el objeto que restaurar el estado Originator.


3. Observer.

Intención

Define una dependencia uno a muchos de objetos, de tal manera que cuando un objeto cambia el resto son notificados automáticamente.

Aplicabilidad.

Use el patrón observer cuando:
  • Una abstracción tiene dos aspectos, uno de los cuales depende del otro. Encapsular estos aspectos en objetos separados permite que los objetos varíen (y puedan ser reutilizados) de forma independiente
  • Un cambio en un objeto requiere que cambien otros y no sabemos cuáles ni cuántos.
  • Un objeto necesita notificar a otros, cambios en su estado sin hacer énfasis sobre quiénes son dichos objetos. Es decir, cuando no queremos que estén fuertemente acoplados.
Estructura


Participantes
  • ConcreteSubject: Guarda el estado de interés para los objetos.
  • ConcreteObserver: Envía una notificación a sus observadores cuando cambia su estado.
  • ConcreteObserver: Mantiene una referencia a un objeto ConcreteSubject. Guarda el estado que debería permanecer sincronizado con el objeto observado. Implementa la interfaz.
  • Observer para mantener su estado consistente con el objeto observado.


4. State

Intención

Permite a un objeto cambiar su comportamiento cuando cambia su estado. El objeto parece cambiar de clase.

Aplicabilidad

Use el patrón State en cualquiera de los siguientes casos:
  • El comportamiento del objeto depende de su estado, y debe cambiar su comportamiento en tiempo de ejecución dependiendo de su estado.
  • Las operaciones tienen grandes estructuras CASE que dependen del estado del objeto, que es representado por uno o más constantes de tipo enumerado.

Estructura

Participantes
  • Context: Define interfaz. Mantiene una instancia con el estado actual
  • State: Define la interfaz para el comportamiento asociado a un determinado estado del Contexto.
  • ConcreteState: Cada subclase implementa el comportamiento asociado con un estado del contexto.

Referencias bibliográficas
[1] Erich Gamma et al, Elements of reusable object-oriented software.
[2] Steve Holzner, Design patterns for dummies, Wiley Publishing Inc, Indianapolis, EEUU, 2006, 339.
[3] Jesús García Molina, Análisis y diseño de software - Patrones de diseño, dis.um.es/~jmolina/astema3