2010-02-06 19 views
14

Sono in fase di progettazione di un'applicazione e desidero utilizzare lo command pattern per gli scopi di annullamento/ripristino. Ho fatto qualche ricerca sul pattern di comando ma l'unica cosa che non ottengo è: un comando dovrebbe avere i metodi di annulla e ripeti, o dovrei fare due comandi separati, uno per annullare e uno per ripetere, e chiamare quelli dal comando principale stesso?Implementazione del pattern di comando

risposta

11

L'oggetto comando stesso dovrebbe implementare la funzionalità di annullamento/ripristino.

I comandi vengono generalmente inseriti e interrotti da una pila gestita da un gestore comandi per implementare l'annullamento a più livelli. Quando i comandi vengono eseguiti, vengono messi in pila e quando vengono annullati vengono prelevati dalla pila.

Il pattern di memento sarebbe utilizzato insieme al pattern di comando, non sostituisce l'utilizzo del pattern di comando. Sarebbe usato per mantenere lo stato richiesto per l'operazione di annullamento.

+1

Vorrei aggiungere che una soluzione migliore non è solo una semplice pila. Invece, vuoi una lista e un riferimento all'elemento corrente. Annullare riporta indietro il riferimento e * lo ripete * lo porta avanti. L'utilizzo di una pila non ti consente di ripetere. – munificent

+1

Ho usato 2 stack, annullare e ripetere lo stack. Se si annulla un'azione, questa si apre dallo stack di annullamento e passa alla pila di ripetizioni. L'aggiunta di una nuova azione ne spinge uno nuovo nello stack di annullamento e la cancellazione della pila di ripetizione. – Wout

2

Si potrebbe anche voler considerare il modello di memento per questo, lo usiamo e funziona brillantemente per annullare.

+0

Il pattern di memoria richiederà meno tempo per implementare il pattern di comando quando lo voglio solo per annullare? – slayerIQ

+0

@slayerIQ Il pattern di memento verrebbe utilizzato insieme al pattern di comando, non sostituisce l'utilizzo del pattern di comando. – David

+0

Quindi il ricordo dovrebbe contenere l'annullamento e ripetere gli stack, E gli stack conterranno i comandi, ho ragione? – slayerIQ

Problemi correlati