le patron de conception commande
DESCRIPTION
Présentation rapide du patron Commande, du GoF.TRANSCRIPT
![Page 1: Le patron de conception Commande](https://reader038.vdocuments.pub/reader038/viewer/2022100420/55639d21d8b42aae0d8b4759/html5/thumbnails/1.jpg)
Le patron de conception Commande
Gerson Sunyé — Université de Nantes http://sunye.free.fr
�1
![Page 2: Le patron de conception Commande](https://reader038.vdocuments.pub/reader038/viewer/2022100420/55639d21d8b42aae0d8b4759/html5/thumbnails/2.jpg)
Gerson Sunyé — Université de Nantes
Objectif
• Encapsuler une requête dans un objet, de manière à pouvoir stocker une liste de requêtes, les tracer et permettre l’annulation d’opérations.
�2
![Page 3: Le patron de conception Commande](https://reader038.vdocuments.pub/reader038/viewer/2022100420/55639d21d8b42aae0d8b4759/html5/thumbnails/3.jpg)
Gerson Sunyé — Université de Nantes
Motivation
• Parfois, nous avons besoin d’envoyer des requêtes à des objets, sans connaître l’opération qui est demandée, ni le receveur de cette requête.
• Par exemple, un bouton d’une IHM: seuls les clients qui créent et utilisent un bouton peuvent implémenter l’action liée à ce bouton.
�3
![Page 4: Le patron de conception Commande](https://reader038.vdocuments.pub/reader038/viewer/2022100420/55639d21d8b42aae0d8b4759/html5/thumbnails/4.jpg)
Gerson Sunyé — Université de Nantes
Exemple
open()close()cut()copy()paste()
Document
execute()Command
execute()PasteCommand
Menuclicked()
MenuItemApplication
PasteCommand:execute() { document.paste()}
�4
![Page 5: Le patron de conception Commande](https://reader038.vdocuments.pub/reader038/viewer/2022100420/55639d21d8b42aae0d8b4759/html5/thumbnails/5.jpg)
Gerson Sunyé — Université de Nantes
Solution
• Transformer les requêtes en objets, dont les classes sont des sous-classes d’une classe abstraite «Command», qui définit une interface pour l’exécution d’opérations.
�5
![Page 6: Le patron de conception Commande](https://reader038.vdocuments.pub/reader038/viewer/2022100420/55639d21d8b42aae0d8b4759/html5/thumbnails/6.jpg)
Gerson Sunyé — Université de Nantes
Structure
/Invoker
/action()/Receiver
execute()/Command
execute()/Command
Command:execute() { receiver.action()}
�6
![Page 7: Le patron de conception Commande](https://reader038.vdocuments.pub/reader038/viewer/2022100420/55639d21d8b42aae0d8b4759/html5/thumbnails/7.jpg)
Gerson Sunyé — Université de Nantes
Compromis d’implémentation
• Les commandes peuvent stocker des informations d’état, qui aideront l’annulation ou la création d’un historique d’opérations.
• Les commandes peuvent être composées (voir Composite).
�7
![Page 8: Le patron de conception Commande](https://reader038.vdocuments.pub/reader038/viewer/2022100420/55639d21d8b42aae0d8b4759/html5/thumbnails/8.jpg)
Gerson Sunyé — Université de Nantes
• Parfois, les commandes peuvent implémenter l’opération, sans la déléguer.
�8
![Page 9: Le patron de conception Commande](https://reader038.vdocuments.pub/reader038/viewer/2022100420/55639d21d8b42aae0d8b4759/html5/thumbnails/9.jpg)
Commande
Command
�9