6: Sexto Patrón de Diseño - FranzBurneo/Patrones-de-dise-o GitHub Wiki

Memento

Memento pertenece al grupo de los patrones de diseño de comportamiento, este patrón permite guardar y restaurar el estado anterior de un objeto sin revelar los detalles de su implementación.

El patrón de diseño de Memento define tres roles distintos:

  1. Originador: el objeto que sabe cómo guardarse a sí mismo.
  2. Cuidador: el objeto que sabe por qué y cuándo el Originador necesita guardarse y restaurarse a sí mismo.
  3. Memento: la caja de seguridad que escribe y lee el Originador y el cuidador lo guía.

Problema

Restaurar un objeto a su estado anterior. Ejemplo: operaciones de "deshacer" o "reparar"

Estructura

Esta es la implementación básica del patrón, usando la compatibilidad con clases anidadas.

Ejemplo

Se Captura y externaliza el estado interno de un objeto para que pueda ser restaurado más tarde, sin violar la encapsulación. import pickle

class Originator:

Creamos un memento que contenga una captura de su actual estado. Usamos el recuerdo para restaurar su estado interno.

def __init__(self):
    self._state = None

def set_memento(self, memento):
    previous_state = pickle.loads(memento)
    vars(self).clear()
    vars(self).update(previous_state)

def create_memento(self):
    return pickle.dumps(vars(self))

def main():

originator = Originator()
memento = originator.create_memento()
originator._state = True
originator.set_memento(memento)

if __name__ == "__main__":

main()

Bibliografía

https://sourcemaking.com/design_patterns/memento