Memento

Revisión del 18:40 6 jul 2019 de Javiermartin jc (discusión | contribuciones) (Texto reemplazado: «<div align="justify">» por «»)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Memento
Información sobre la plantilla
ImgMeneto01.gif
Concepto:Se utiliza para guardar el estado de un objeto que se necesita recuperar posteriormente.

El patrón Memento: Es un patrón de diseño que se utiliza para almacenar el estado de un objeto o de un sistema, en un momento dado permitiendo que se pueda recuperar luego. Para lograr esto, se mantiene almacenado el estado del objeto en una clase independiente, de forma que ese recuerdo permita que el objeto sea modificado y pueda volver a su estado anterior. En fin, representa y externaliza el estado interno de un objeto sin violar la encapsulación de forma que este puede a dicho estado mas tarde.


Nombre del Patrón

Memento (Recuerdo, Token).


Clasificación del Patrón

Patrón de Comportamiento.


Propósito

Guardar una "Instantánea" del estado de un objeto, de forma que pueda ser devuelto sin romper el encapsulamiento del mismo.


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


Usos del patrón

  • Se usa este patrón cuando se quiere poder restaurar el sistema desde estados pasados.
  • Es usado cuando se desea facilitar el hacer y deshacer de determinadas operaciones.


Participantes

Memento

  • Guarda el estado interno del objeto Creador. El memento puede guardar tanta información del estado interno del creador como sea necesario a discreción del creador
  • Protege frente a accesos de otros objetos que no sean el creador. Los mementos tienen realmente dos interfaces:
    • El Conserje ve una interfaz reducida del Memento, sólo puede pasar el memento a otros objetos.
    • El Creador, por el contrario, ve una interfaz amplia, que le permite acceder a todos los datos necesarios para volver a su estado anterior. Idealmente, sólo el creador que produjo el memento estaría autorizado a acceder al estado interno de éste.

Creador

  • Crea un memento que contiene una instantánea de su estado interno actual. Usa el memento para volver a su estado anterior.

Conserje

  • Es responsable de guardar en lugar seguro el memento.
  • Nunca examina los contenidos del memento, ni opera sobre ellos.


Ventajas e Inconvenientes

Ventajas

  • Deja alguna información en un objeto para que sea accesible por otro objeto utilizando control de acceso por defecto.
  • El Originator es más simple. En otros patrones que conservan la encapsulación el Originator es el que tiene que registrar todos los estados distintos, es mucho más sencillo dar esa responsabilidad a la parte solicitante.
  • Se usa en transacciones de Bases de Datos.
  • Usar este patrón en operaciones de UNDO/REDO.

Inconvenientes

  • Los mementos son costosos, es costoso crear los objetos Memento si se tiene que almacenar todas las partes del estado del Originator.
  • El almacenamiento de los Memento es costoso, el cliente que desea guardar su estado, no conoce el tamaño real del Memento.
  • Definición de interfaces reducidas y amplias. En algunos lenguajes puede ser difícil garantizar que sólo el creador acceda al estado del memento.
  • Preservación de los límites de la encapsulación. El memento evita exponer información que sólo debería ser gestionada por un creador, pero que sin embargo debe ser guardada fuera del creador.


Patrones relacionados

  • Command: el patrón Command utiliza Mementos para registrar el estado de las acciones que no se pueden hacer.
  • State: la mayoría de los estados utilizan el patrón Memento.


Fuentes