Estoy escribiendo una aplicación de pintura/gráficos Java para un teléfono móvil (por lo que la memoria es limitada). El estado de la aplicación es esencialmente tres 1000x500 bitmaps (es decir, capas de una pintura). La carga de tres mapas de bits lleva aproximadamente 2 o 3 segundos.Deshacer/rehacer rápidamente con el patrón memento/command?
Estoy tratando de escribir un motor de deshacer pero no puedo encontrar una buena manera de hacerlo. Los enfoques típicos son:
utilizar el patrón de comando: Al deshacer, volver a cargar el estado del archivo inicial y luego reproducir todos los comandos procesados hasta el momento a excepción de la última. Hacer esto ingenuamente significa esperar 2 o 3 segundos para cargar el estado inicial que es demasiado lento. Tampoco hay suficiente memoria para almacenar el estado inicial en la memoria.
Utilice el patrón memento: cuando deshace, reemplaza la parte del estado actual que se cambió con el estado anterior. Esto significa que cada acción necesita guardar bitmaps del estado anterior en el disco porque simplemente no hay suficiente memoria en un dispositivo móvil para almacenar esto en la memoria. Como el ahorro de mapas de bits lleva tiempo, ¿cómo puedo enfrentarlo si el usuario decide, p. pintar muchas pinceladas en rápida sucesión? No puedo hacerlos esperar.
Todas mis soluciones implican complejos híbridos de los patrones anteriores.
¿Alguien puede sugerir una solución que me permita tener un proceso de deshacer/rehacer razonablemente rápido para mi aplicación?
¿No hay más sugerencias? Hubiera pensado que mis preguntas eran fundamentales para implementar cualquiera de estos patrones en un proyecto real. – BobDuck
Posible duplicado de [¿Cómo implemento un simple deshacer/rehacer para acciones en java?] (Https: // stackoverflow.com/questions/11530276/how-do-i-implement-a-simple-undo-redo-for-actions-in-java) –