Skip to main content

Inicia sesión en CleanKata

Sigue tu progreso, gana XP y desbloquea todas las lecciones.

Al iniciar sesión aceptas nuestros Términos de uso y Política de privacidad.

Patrones de Diseño80 XP8 min

Memento: Deshacer con Instantáneas

Captura y restaura el estado interno de un objeto sin violar la encapsulación — implementa Deshacer almacenando instantáneas de estados pasados.

Por qué importa

El enfoque ingenuo para deshacer es exponer todos los campos de un objeto para que el código externo pueda guardarlos y restaurarlos. Pero esto rompe la encapsulación — cada cliente ahora depende de los internos del objeto. Añade un campo y el sistema de deshacer falla silenciosamente. El patrón Memento resuelve esto elegantemente: el propio objeto crea una instantánea (Memento) que es opaca para el exterior. El código externo almacena y devuelve la instantánea, pero nunca la inspecciona.

Memento vs Command para deshacer

Ambos patrones habilitan deshacer, pero de forma diferente. Command almacena la operación inversa — para deshacer "escribir Hola" elimina "Hola". Memento almacena una instantánea completa — restaurar es siempre un reemplazo simple. Command es más eficiente en memoria para cambios pequeños; Memento es más simple de implementar correctamente cuando el estado es complejo o no hay una inversa limpia. Usa Command cuando la inversa es obvia; Memento cuando no lo es.

💡Conclusión clave

La clave de Memento: el originador (Editor) crea su propia instantánea — ningún código externo necesita leer su estado privado para implementar deshacer.

🔧 Algunos ejercicios pueden tener errores. Si algo parece incorrecto, usa el botón Feedback (abajo a la derecha) para reportarlo — nos ayuda a corregirlo rápido.

Pista: La clave de Memento: el originador (Editor) crea su propia instantánea — ningún código externo necesita leer su estado privado para implementar deshacer.

✗ Tu versión