Répondre à une question très ancienne. (Est-ce que quelqu'un voit les dernières réponses au lieu des plus votées?)
C'est une confusion valable à avoir en raison des similitudes. Les modèles de stratégie et de commande utilisent l' encapsulation . Mais cela ne les rend pas pareils.
La principale différence est de comprendre ce qui est encapsulé. Le principe OO, dont dépendent les deux modèles, est d' encapsuler ce qui varie .
En cas de stratégie, ce qui varie, c'est l' algorithme . Par exemple, un objet de stratégie sait comment générer une sortie dans un fichier XML, tandis que l'autre sort vers, par exemple, JSON. Différents algorithmes sont conservés ( encapsulés ) dans différentes classes. C'est aussi simple que ça.
En cas de commande, ce qui varie, c'est la requête elle-même. La demande peut provenir de File Menu > Delete
ou Right Click > Context Menu > Delete
ou Just Delete Button pressed
. Les trois cas peuvent générer 3 objets de commande du même type. Ces objets de commande ne représentent que 3 demandes de suppression; pas d'algorithme de suppression. Puisque les demandes sont maintenant un tas d'objets, nous pourrions les gérer facilement. Tout à coup, il devient trivial de fournir des fonctionnalités telles que l'annulation ou la restauration.
La manière dont la commande implémente la logique demandée n'a pas d'importance. En appelant execute (), il peut implémenter un algorithme pour déclencher la suppression ou il peut même le déléguer à d'autres objets, voire déléguer à une stratégie. Il ne s'agit que du détail d'implémentation du modèle de commande. C'est pourquoi il est nommé comme commande bien que ce ne soit pas une manière polie de demander : -)
Mettez-le en contraste avec la stratégie; ce modèle ne concerne que la logique réelle qui est exécutée. Si nous faisons cela, cela aide à obtenir différentes combinaisons de comportements avec un ensemble minimal de classes, empêchant ainsi l'explosion de classe.
Je pense que Command nous aide à élargir notre compréhension de l'encapsulation tandis que Strategy fournit une utilisation naturelle de l'encapsulation et du polymorphisme.