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)

Patrón de diseño memento by Héctor de Jesús Escudero Blasco on Prezi

Memento Pattern DevIQ

Memento Design Pattern

Patron Memento PDF Ingeniería de software Gestión de tecnología

MEMENTO PATTERN.