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.
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