2010-02-06 15 views
14

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

11

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.

+1

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

+1

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

2

También es posible que desee considerar el patrón de recuerdo para esto, lo usamos y funciona genial para deshacer.

+0

¿El patrón de recuerdo tardará menos tiempo en implementarse que el patrón de comando cuando solo quiero deshacerlo? – slayerIQ

+0

@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

+0

Así que el recuerdo mantendría las pilas de deshacer y rehacer, y las pilas contendrán los comandos ¿estoy en lo correcto? – slayerIQ

Cuestiones relacionadas