El patrón memento se puede utilizar, fundamentalmente, para guardar el estado de un objeto en momentos determinados permitiendonos la implementación de utilidades como "deshacer" y "rehacer" o incluso almacenar el estado completo de una aplicación.
Nombre:
Memento.
También conocido como:
Cadena de Responsabilidad.
Propósito:
Memento guarda parte o todo el estado interno de un objeto, para que este objeto pueda ser
restaurado más tarde al estado guardado previamente por Memento. Esta operación debe ocurrir sin romper el principio del encapsulamiento.
Aplicabilidad:
Este patrón se utiliza generalmente cuando:
· Todo o parte del estado de un objeto debe o se desea ser guardado para ser restaurado más tarde.
· Cuando una interfaz directa para obtener el estado de un objeto exponga detalles de su
implementación.
Estructura:

Participantes:
· Originator: Originator crea un objeto Memento conteniendo una fotografía de su estado interno. Originator usa a Memento para restaurar su estado interno.
· Memento: Almacena el estado interno de un objeto Originator. El Memento puede almacenar mucho o parte del estado interno de Originator. Tiene dos interfaces. Una para Caretaker, que le permite manipular el Memento únicamente para pasarlo a otros objetos. La otra interfaz sirve para que Originator pueda almacenar/restaurar su estado interno, sólo Originator puede acceder a esta interfaz, al menos en teoría.
· Caretaker: Es responsable por mantener seguro a Memento, Carataker no opera o examina el contenido de Memento.Handler: Define una interfaz para tratar las peticiones, implementa el enlace al sucesor.
Consecuencias:
· Preservación de los límites de la encapsulamiento.
· Simplifica al Creador.
· El uso de mementos puede ser costoso.
· Definición de interfaces reducidas y amplias.
· Costes ocultos en el cuidado de los mementos.
Patrones relacionados:
· Command.
· Iterator.
Etiquetas: Behavioral Patterns, Memento, Patrones de Comportamiento