Je lis sur le modèle de commande et j'essayais de comprendre son implémentation dans JDK. Je pense que le service d'exécution est une implémentation du modèle de commande. Est-ce que n'importe quel expert peut confirmer ceci?Est-ce que le service d'exécution java est une implémentation du modèle de conception de commande?
Est-ce que le service d'exécution java est une implémentation du modèle de conception de commande?
Répondre
Pour développer mon commentaire, non, je ne dirais pas qu'un ExecutorService
constitue une implémentation du modèle de commande, mais on pourrait l'utiliser dans le cadre d'une implémentation de ce modèle. ExecutorService
eux-mêmes manquent de l'aspect le plus important du modèle de commande: les commandes .
Le motif du motif consiste à encapsuler des actions dans des objets (habituellement réutilisables), de telle sorte qu'ils soient disponibles pour une utilisation aux moments appropriés. Vous pouvez utiliser Callable
pour ce faire, puis engager un ExecutorService
pour exécuter réellement les commandes au besoin. Beaucoup d'utilisations de ExecutorService
s ne fonctionnent pas vraiment comme ça, cependant - les Callable
qui sont exécutées n'ont pas la cohérence ou la généralité que je suis enclin à associer à une commande. C'est cependant un jugement quelque peu subjectif.
Je pense qu'un exemple plus clair du modèle de commande se trouve dans l'utilisation de javax.swing.Action
par Swing. On implémente Action
s (les commandes) qui effectuent des tâches qui peuvent être déclenchées via l'interface graphique de l'application. Les actions sont découplées du code qui les signale pour effectuer leur travail, et en fait chacun peut être connecté à l'interface graphique à plusieurs points, de sorte qu'il peut être exécuté via différents gestes d'interface graphique. Swing implémente le modèle de commande en fournissant l'interface Action
, les composants qui invoquent les commandes représentées par Action
, et une API permettant d'associer Action
avec des gestes d'interface graphique sur des composants particuliers. Par exemple, dans une application de visualisation, un Action
X peut fournir le comportement de rotation de la vue d'un pas vers la gauche. C'est une unité de travail cohérente, générale et assez autonome. Je peux alors enregistrer ce (même) objet à invoquer en réponse à une ou plusieurs frappes de touches, sélections d'éléments de menu, et même des gestes de souris. Ceci décompose le travail à effectuer du (des) mécanisme (s) pour déclencher ce travail, qui est la caractéristique fonctionnelle clé du modèle de commande.
Vous trouverez plus de détails sur ces subtilités dans https: //www.dre.vanderbilt .edu/~ schmidt/PDF/CommandProcessor.pdf – Fuhrmanator
Ce n'est pas directement lié à votre question mais à mon humble avis C'est très intéressant: https://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns-in-javas-core-libraries?rq=1 –
Le modèle de commande implique plusieurs composants clés, dont un 'ExecutorService' peut être considéré comme un seul (le" invoker ", dans les termes [Wikipedia] (https://en.wikipedia.org/wiki/Command_pattern)). Dans cette vue, le rôle de la "commande" est rempli par les implémentations 'Callable'. Je préférerais cependant dire que certains programmes utilisent un 'ExecutorService' pour implémenter le pattern. –
ExecutorService est une sous-interface de Executor. Pour en savoir plus, consultez le site http://www.dre.vanderbilt.edu/~schmidt/cs892/2017-PDFs/Java-Executor-pt1-pt2.pdf. – Fuhrmanator