Estoy en el proceso de diseño de una aplicación, y me gustaría usar el command pattern para deshacer/rehacer. Hice algunas investigaciones sobre el patrón de comando, pero lo único que no entiendo es: ¿Debería un comando tener los métodos deshacer y rehacer, o debería hacer dos comandos separados, uno para deshacer y otro para rehacer, y llamarlos desde el comando principal en sí?Implementando el patrón de comando
Respuesta
El objeto de comando en sí debería implementar la funcionalidad deshacer/rehacer.
Los comandos generalmente se empujan y se sacan de una pila mantenida por un administrador de comandos para implementar deshacer de varios niveles. Cuando se ejecutan los comandos, se insertan en la pila y, cuando se deshacen, se extraen de la pila.
El patrón de recuerdo se usará junto con el patrón de comando, no reemplaza el uso del patrón de comando. Se usaría para mantener el estado requerido para la operación de deshacer.
También es posible que desee considerar el patrón de recuerdo para esto, lo usamos y funciona genial para deshacer.
¿El patrón de recuerdo tardará menos tiempo en implementarse que el patrón de comando cuando solo quiero deshacerlo? – slayerIQ
@slayerIQ El patrón de recuerdo se usaría junto con el patrón de comando, no es un reemplazo del uso del patrón de comando. – David
Así que el recuerdo mantendría las pilas de deshacer y rehacer, y las pilas contendrán los comandos ¿estoy en lo correcto? – slayerIQ
- 1. Implementando el patrón de decorador en Python
- 2. Implementando el Patrón de Comando usando el delegado de Acción C#
- 3. Implementando el patrón de visitante usando las plantillas de C++
- 4. Preguntas sobre el patrón de comando (PHP)
- 5. Patrón de comando frente a patrón de visitante
- 6. Patrón de comando: cómo pasar parámetros a un comando?
- 7. Bash: patrón grep de salida de comando
- 8. Pensando en usar el patrón de diseño de comando
- 9. Inyección de dependencia al utilizar el patrón de comando
- 10. Patrón de comando - devuelve un valor
- 11. Implementando un puente-patrón compatible con KVO/Bindings en Cocoa
- 12. Implementando un estilo de interfaz de línea de comando "[comando] [acción] [parámetro]"?
- 13. patrón Comando General y el patrón de despacho de comandos en Python
- 14. Implementando el evento de doble clic en Silverlight 4 Datagrid
- 15. Ejemplo de patrón de comando de WPF personalizado
- 16. Uso de un patrón de estrategia y un patrón de comando
- 17. Patrón de objeto de comando wannabe o lo real?
- 18. Patrón de comando: ejecución de varios comandos en secuencia
- 19. Patrón de comando que conduce a explosión de clase
- 20. Implementando Clases de "retroceso"
- 21. Patrón de comando parece innecesariamente complejo (¿qué no estoy entendiendo?)
- 22. Implementando patrón de visitante mientras permite diferentes tipos de retorno de funciones
- 23. Uso del patrón de comando para devolver datos
- 24. Implementando CollectionChanged
- 25. implementando el estilo de chat WP7
- 26. Implementando el equilibrio de carga con Python
- 27. ¿Implementando el algoritmo del cubo de marcha?
- 28. Implementando el rastreo hashbang/Ajax de Google con ASP.NET MVC?
- 29. Implementando ToArgb()
- 30. Implementando IConvertible.GetTypeCode
Añadiría que una mejor solución no es solo una pila simple. En su lugar, desea una lista y una referencia al elemento actual. Deshacer retrocede la referencia, y * rehacer * lo avanza. Usar una pila no te permite rehacer. – munificent
He usado 2 pilas, deshacer y rehacer la pila. Si deshace una acción, emerge de la pila de deshacer y empuja hacia la pila de rehacer. Agregar una nueva acción es empujar una nueva en la pila de deshacer y borrar la pila de rehacer. – Wout