2017-08-04 3 views
0

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?

+0

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 –

+2

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. –

+0

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

Répondre

1

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 ActionX 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.

+0

Vous trouverez plus de détails sur ces subtilités dans https: //www.dre.vanderbilt .edu/~ schmidt/PDF/CommandProcessor.pdf – Fuhrmanator