logotipo

Patrón Memento



Descripción general

El patrón memento es un patrón de diseño de software, y está catalogado como un patrón de comportamiento
Se utiliza para guardar el estado de un objeto y poder luego restaurar el objeto a un estado previo
También sirve para guardar una colección de estados sucesivos que puede tener un objeto y poder luego restaurar el objeto a un estado previo.
Cuando hablamos de estado de un objeto, debemos entender, los valores que ese objeto tiene en sus variables miembro.

[TOC] Tabla de Contenidos


↑↑↑

Propósito

Representa, y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste, puede volver a dicho estado más tarde.


↑↑↑

También conocido como

Token - En este contexto, "recuerdo"-


↑↑↑

Motivación

A veces es necesario guardar el estado interno de un objeto. Esto es necesario cuando se implementan casillas de verificación o mecanismos de deshacer que permiten a los usuarios anular operaciones provisionales y recuperarse de los errores. Debe guardarse información del estado en algún sitio para que los objetos puedan volver a su estado anterior. Pero los objetos normalmente encapsulan parte de su estado, o todo, haciéndolo inaccesible a otros objetos e imposible de guardar externamente. Exponer este estado violaría la encapsulación, lo que puede comprometer la fiabilidad y extensibilidad de la aplicación.

Este problema se puede solucionar con el patrón Memento. Un memento es un objeto que almacena una instantánea del estado interno de otro objeto -el creador del memento-. El mecanismo de deshacer solicitará un memento al creador cuando necesite comprobar el estado de éste. El creador inicializa el memento con información que representa su estado actual. Sólo el creador puede almacenar y recuperar información del memento -el memento es "opaco" a otros objetos-.


↑↑↑

Aplicabilidad

Úsese el patrón Memento cuando


↑↑↑

Estructura

Diagrama UML del patron memento  (29K)


↑↑↑

Participantes

Memento

Creador

Conserje


↑↑↑

Colaboraciones

Un conserje solicita un memento a un creador, lo almacena durante un tiempo y se lo devuelve a su creador, tal y como ilustra el siguiente diagrama de interacción:

Diagrama de Iteración del patrón memento

A veces el conserje no devolverá el memento a su creador, ya que el creador podría no necesitar nunca volver a un estado anterior.

Los mementos son pasivos. Sólo el creador que creó el memento asignará o recuperará su estado.


↑↑↑

Consecuencias

El patrón Memento tiene varias consecuencias:


↑↑↑

Implementación

Éstas son dos cuestiones a considerar a la hora de implementar el patrón Memento:

Por ejemplo, las órdenes de deshacer de un historial pueden usar mementos para asegurar que las órdenes vuelven a su estado original exacto cuando se deshacen [véase el patrón Command]. El historial define un orden concreto en el que las órdenes pueden deshacerse y repetirse. Eso significa que los mementos pueden guardar únicamente el cambio producido por una orden, en vez del estado completo de cada objeto al que afecta.


↑↑↑

Código de ejemplo

Siguiendo este enlace tienes varios códigos de ejemplo de como se utiliza este patron


↑↑↑

Usos Conocidos

Las colecciones de Dylan [App92] proporcionan una interfaz de iteración que refleja el patrón Memento. Estas colecciones tienen la noción de un objeto "estado", el cual es un memento que representa el estado de la iteración. Cada colección puede representar el estado actual de la iteración en la forma que prefiera; dicha representación permanece completamente oculta a los clientes.

El toolkit de resolución de problemas QOCA guarda información incremental en mementos [HHMV92]. Los clientes pueden obtener un memento que represente la solución actual a un sistema de ecuaciones. El memento contiene sólo aquellas variables de las ecuaciones que han cambiado desde la última solución. Normalmente, para cada nueva solución sólo cambia un pequeño subconjunto de las variables del resolvente. Este subconjunto es suficiente para devolver el resolvente a su solución precedente; volver a soluciones anteriores requiere almacenar mementos de las soluciones intermedias. Por tanto, no se pueden establecer mementos en cualquier orden; QOCA se basa en un mecanismo de historial para revertir a soluciones anteriores.

Existen operaciones en una base de datos, que deben realizarse de una vez, es decir, o se realizan todas las operaciones de modificación (actualización) de la base de datos de una vez, y si no es posible, si existe un fallo en el proceso, hay que volver a la situación inicial. El llamado mecanismo de ‘Rollback’
Para implementar este mecanismo de ‘rollback’ se usa el patrón de diseño ‘memento’ de forma que antes de realizar la operación de actualización de la base de datos, se realiza una copia, un ‘memento’ de la base de datos, para que si la operación de actualización falla, poder volver a la situación inicial sin que se pierda información.
idea copiada del siguiente documento http://www.oodesign.com/memento-pattern.html


↑↑↑

Patrones Relacionados

↑↑↑

Bibliografía consultada


↑↑↑

Páginas web consultadas


↑↑↑

A.2.Enlaces

[Para saber mas]
[Grupo de documentos]
[Documento Index]
[Documento Start]
[Imprimir el Documento]
© 1.997- 2.010 - La Güeb de Joaquín
Joaquin Medina Serrano
Ésta página es española