Memento es un patrón de diseño cuya finalidad es almacenar el estado de un objeto (o del sistema completo) en un momento dado de manera que se pueda restaurar en ese punto de manera sencilla. Para ello se mantiene almacenado el estado del objeto para un instante de tiempo en una clase independiente de aquella a la que pertenece el objeto (pero sin romper la encapsulación), de forma que ese recuerdo permita que el objeto sea modificado y pueda volver a su estado anterior.

Motivación

Se usa este patrón cuando se quiere poder restaurar el sistema desde estados pasados y por otra parte, es usado cuando se desea facilitar el hacer y deshacer de determinadas operaciones, para lo que habrá que guardar los estados anteriores de los objetos sobre los que se opere (o bien recordar los cambios de forma incremental).

Ejemplo

Java

El siguiente programa Java ilustra el uso de "undo" con el patrón Memento. Intervienen tres clases: la clase Originator (Originador) es una clase que cambia de estado; la clase Caretaker (Portero) se encarga de registrar los cambios del Originador; Memento (Recuerdo) guarda el objeto a salvaguardar.

La salida en pantalla es:

Originator: Setting state to State1
Originator: Setting state to State2
Originator: Saving to Memento.
Originator: Setting state to State3
Originator: Saving to Memento.
Originator: Setting state to State4
Originator: State after restoring from Memento: State3

Véase también

  • Command (patrón de diseño), para implementar (Undo - Redo).

Enlaces externos

  • Descripción del patrón Memento en Ada. (en inglés)
  • Diagrama UML del patrón Memento con ejemplos en C# y .NET. (en inglés)
  • Tutorial en sourcemaking.com. (en inglés)

Memento Pattern Implementation PDF

Memento Pattern DevIQ

Lucas•o•lo•gy The Memento Design Pattern in C and

Memento Design Pattern You need to keep state Ennicode

Memento Pattern Java Courses