Command Design Pattern, qu’est-ce?

Mathilde Gerossier
ELP-2018
Published in
5 min readDec 21, 2018

Quand on commence la programmation orienté objet, on commence par choisir un langage parmi tous ceux qui existent comme par exemple les langages JAVA, C++, etc… Mais parfois au cours de nos recherches, on rencontre le nom de différents outils et méthodes de programmation qui nous sont totalement inconnus comme par exemple le design pattern. Je vais donc vous expliquer ce qu’est un design pattern. Ensuite, nous verrons plus précisément ce qu’est le design pattern command et nous en verrons un exemple d’implémentation de ce design pattern.

Le design pattern est un arrangement de modules qui répond à un problème de conception d’un logiciel en programmation orienté objet. C’est une solution standard utilisable dans plusieurs langages différents. Il est composé de différents rôles et actions (correspondant aux différents modules). Il décrit grossièrement la solution qui pourra être adaptée en fonction du besoin. D’après le livre : Design Patterns: Elements of Reusable Software, il existe trois types de design pattern : les créateurs, les structuraux et les comportementaux.

Les créateurs définissent l’instanciation et la configuration des objets et classes. Les structuraux aident à résoudre les problèmes de structure des classes et de leur interface. Les comportementaux définissent l’organisation des objets afin que les responsabilités soient réparties entre eux. Ce dernier type contient par exemple le design pattern command dont nous allons parler par la suite.

Le design pattern command permet d’encapsuler des commandes ou requêtes dans d’autres commandes ou requêtes afin de permettre d’émettre des requêtes sur un objet dont les caractéristiques et les fonctions sont inconnus. L’encapsulation permet de cacher l’implémentation de l’objet. Pour cela, il empêche l’accès aux données de l’objet par tout autre moyen qu’avec des services que l’on propose, cela garanti l’intégrité de ces données. On peut représenter ce design pattern par le diagramme suivant :

https://www.oodesign.com/command-pattern.html

Dans ce pattern, il y a plusieurs classes. Une classe client (en haut à gauche sur le schéma) qui crée un objet concreteCommand pour exécuter une opération et paramètre une classe receiver. Ensuite, le receiver connait la façon d’exécuter les opérations demandées. La concreteCommand va étendre l’interface Command et y implémenter la méthode execute en invoquant l’opération correspondante sur le Receiver. La concreteCommand définit le lien entre le Receiver et l’action à exécuter. La Command déclare l’interface pour exécuter l’opération. L’Invoker lui, demande à la Commande de transmettre la requête.

Concrètement, le client va demander à une commande de s’exécuter. L’Invoker va prendre la commande, l’encapsuler et la placer dans une file d’attente dans le cas où il y a autre chose à faire avant cette commande, et la concreteCommand qui est en charge de la commande demandée, envoie le résultat au Receiver. Ci dessous, un chronogramme pour comprendre plus facilement ce qu’il se passe.

https://dzone.com/articles/design-patterns-command

Ce pattern est applicable dans certains cas :

_ paramétrer des objets suivant les actions qu’ils doivent exécuter.

_spécification et ajout dans une file d’attente et exécuter des requêtes à différents moments.

_offrir un support pour des actions qui peuvent être annulées(la méthode exécute peut mémoriser un état et permettre des retours à cet état. )

_structurer le système dans un haut niveau d’opérations basé sur des opérations simples.

_découper l’objet qui invoque l’action depuis l’objet qui exécute l’action. Grâce à cet usage, ce pattern est aussi connu sous le nom de Producer-Consumer design pattern.

https://www.codingame.com/playgrounds/10716/design-pattern-command/un-exemple

Après ces quelques explications, nous allons voir un exemple simple. Nous allons commencer par l’exemple d’une télécommande. La télécommande à le rôle de client, les boutons sont des Invoker, les concreteCommand ConsoleOn et ConsoleOff exécutent les méthodes du receiver Console. Chaque bloc du schéma ci-dessous va être une classe ou une méthode de classe.

On commence par créer les receiver Radio et Console :

Ensuite, on crée l’interface Icommande qui est implémenté à chaque nouvelle commande :

Puis, on crée les commandes pour chacun des objets, celle pour allumer la console :

Et celle qui permet de monter le son de la radio :

Ensuite, on crée la télécommande :

Et enfin, on crée le main qui est la partie principale du programme:

Et voilà nous avons créé une télécommande radio en JAVA à l’aide du design pattern command.

Maintenant, le design pattern command doit vous sembler moins obscur, c’est un outil de programmation orienté objet. Il permet d’émettre des requêtes dans d’autres requêtes afin d’agir sur un objet dont les paramètres et caractéristiques nous sont inconnues.

--

--