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:
- Originador: el objeto que sabe cómo guardarse a sí mismo.
- Cuidador: el objeto que sabe por qué y cuándo el Originador necesita guardarse y restaurarse a sí mismo.
- 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()