Commande
Cet article présente une implémentation en Pascal Objet du modèle de conception "Commande". Ce modèle de conception est décrit dans l'ouvrage "DESIGN PATTERNS" (voir la rubrique Ressources en fin d'article).
La définition de ce modèle est la suivante :
"Encapsuler une requête comme un objet, autorisant ainsi le paramétrage des clients par différentes requêtes, files d'attente et récapitulatifs de requêtes, et de plus, permettant la réversion des opérations."

La classe Pascal Objet sur lequel repose ce modèle est TCommand, les classes TMacroCommand (collection d'objet TCommand) et TMacroCommandLog en sont dérivées, comme illustré dans le diagramme de classes UML ci-dessous :



Un projet Delphi 6 très simple est fourni comme exemple d'utilisation de ces classes pour en montrer l'intérêt.

TCommand est une classe abstraite possédant la méthode virtuelle abstraite execute qui réalise l'action à effectuer ; une classe commande concrète (dérivant de TCommand) est créée avec les arguments qui serviront à l'exécution de la méthode surchargée execute. Une fois qu'un objet commande est instancié, un client peut invoquer à tout moment sa méthode execute.

La classe TCommand est basée sur TComponent afin d'utiliser le mécanisme de lecture/écriture de composant Delphi depuis ou dans un flux.
L'application exemple (voir la rubrique Ressources) déclare la classe TMaCommande dérivée de TCommand, afin de conserver dans des objets les choix successifs de l'utilisateur entre une entrée, un plat principal et un dessert.

Chaque objet TMaCommande conserve un choix de l'utilisateur sous forme d'entier (0..2), de sorte que si la méthode execute est appelé, le bouton radio correspondant de l'interface utilisateur est sélectionné.
Tous les choix faits depuis le démarrage de l'application sont conservés dans un objet descendant de TMacroCommand, TMacroCommandLog, qui permet de gérer une collection d'objets commandes.
La méthode surchargée execute de TMacroCommand se contente d'appeler cette même méthode avec tous les objets commandes qu'elle contient.

TMacroCommandLog a la particularité de conserver dans un fichier tout objet commande ajouté à la collection, de sorte que si l'on redémarre l'application, nous pouvons appliquer à nouveau tous les choix de l'utilisateur (comme après un crash système par exemple).
Pour que les opérations de lecture/écriture fonctionnent, l'unité Unit1 déclare dans sa section initialisation l'instruction :

RegisterClasses([TMaCommande]);


Il existe d'autres indications d'utilisation de ce modèle, telles que les transactions ou les opérations "défaire" (undo). Un objet commande pourrait également être transmis à un autre récepteur sur une machine distante et y être exécuté (par sérialisation/désérialisation dans une chaîne de caractères OLE via DCOM par exemple) !


Ressources

Livre "DESIGN PATTERNS"
Catalogue de modèles de conception réutilisables
Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides

Command.pas et projet d'exemple (Delphi 6)

Sommaire

Ressources

Début

Copyright © 2003 OBJECT-EVERYWHERE. Tous droits réservés | Bertrand Goetzmann