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
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.
Vous pourriez aussi considérer le modèle de souvenir pour cela, nous l'utilisons et il fonctionne très bien pour l'annulation.
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
@slayerIQ Le motif mémento est utilisé conjointement avec le motif de commande, il ne remplace pas l'utilisation du motif de commande. – David
Donc le memento tiendrait les piles d'annulation et de rétablissement, et les piles contiendront les commandes suis-je raison? – slayerIQ
- 1. Implémentation du modèle singleton en Java
- 2. Implémentation du modèle atomique C++ 0x
- 3. Implémentation du modèle de visiteur sur les objets agrégés
- 4. Implémentation du modèle de producteur/consommateur en C#
- 5. Implémentation de la commande "système" en Java
- 6. Modèle de commande wpf
- 7. Modèle de commande récurrente
- 8. Implémentation du modèle procducer-consumer avec .NET 4.0
- 9. Implémentation multi-navigateurs du modèle "HTTP Streaming" (push) AJAX
- 10. Réflexion sur l'utilisation du modèle de conception de commande
- 11. Implémentation de classe basée sur un modèle C++ du modèle multiton
- 12. Version du modèle d'objet de la commande stsadm -o execsvcadmjobs
- 13. Motif de commande et modèle de visiteur
- 14. Implémentation d'un modèle d'observateur avec winforms
- 15. Implémentation du serveur OpenSocial
- 16. Implémentation du navigateur EventListenerList
- 17. Exemple de modèle de commande WPF personnalisé
- 18. implémentation de la commande cd en utilisant chdir() dans linux
- 19. Implémentation d'un modèle de référentiel avec structure d'entité. entité Résolution des problèmes de portée du dépôt
- 20. Implémentation du modèle de conception d'usine à l'aide de métaclasses en python
- 21. Implémentation d'un modèle de spécification de structure d'entité
- 22. MVC Implémentation où un moteur de recherche est le modèle
- 23. MVC et le modèle de commande
- 24. Commande de commande get du port série
- 25. Implémentation de modèle en usine utilisant ANSI C
- 26. Implémentation de tableaux PostgreSQL dans le modèle Zend
- 27. Implémentation du marquage dans JDO
- 28. C implémentation du code assembleur
- 29. Implémentation du navigateur EcmaScript 5
- 30. Implémentation du fournisseur d'identité de opensaml 2.0
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
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