2010-02-06 7 views
14

Je suis dans le processus de conception d'une application, et je voudrais utiliser le command pattern pour annuler/rétablir. J'ai fait des recherches sur le modèle de commande, mais la seule chose que je ne comprends pas est: Une commande devrait-elle avoir les méthodes undo et redo, ou devrais-je faire deux commandes séparées, une pour annuler et une pour refaire commande principale elle-même?Implémentation du modèle de commande

Répondre

11

L'objet de commande lui-même doit implémenter la fonctionnalité annuler/rétablir.

Les commandes sont généralement poussées et déplacées à partir d'une pile gérée par un gestionnaire de commandes pour implémenter l'annulation multi-niveau. Lorsque les commandes sont exécutées, elles sont placées sur la pile et lorsqu'elles sont annulées, elles sont retirées de la pile. Le motif mémento serait utilisé en conjonction avec le motif de commande, il ne remplace pas l'utilisation du motif de commande. Il serait utilisé pour maintenir l'état requis pour l'opération d'annulation.

+1

J'ajouterais qu'une meilleure solution n'est pas seulement une simple pile. Au lieu de cela, vous voulez une liste et une référence à l'élément actuel. Undoing avance la référence, et * redoing * la fait avancer. Utiliser une pile ne vous permet pas de refaire. – munificent

+1

J'ai utilisé 2 piles, défaire et refaire la pile. Si vous annulez une action, elle surgit de la pile d'annulation et pousse sur la pile de rétablissement. L'ajout d'une nouvelle action en pousse une nouvelle sur la pile d'annulation et efface la pile de rétablissement. – Wout

2

Vous pourriez aussi considérer le modèle de souvenir pour cela, nous l'utilisons et il fonctionne très bien pour l'annulation.

+0

Le motif mémento prendra-t-il moins de temps à implémenter que le motif de commande alors que je ne veux que le supprimer? – slayerIQ

+0

@slayerIQ Le motif mémento est utilisé conjointement avec le motif de commande, il ne remplace pas l'utilisation du motif de commande. – David

+0

Donc le memento tiendrait les piles d'annulation et de rétablissement, et les piles contiendront les commandes suis-je raison? – slayerIQ

Questions connexes