La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Command Design Pattern. Intention Encapsuler une requête sous forme dobjet paramétrer les clients avec différentes requêtes, files de requêtes logs de.

Présentations similaires


Présentation au sujet: "Command Design Pattern. Intention Encapsuler une requête sous forme dobjet paramétrer les clients avec différentes requêtes, files de requêtes logs de."— Transcription de la présentation:

1 Command Design Pattern

2 Intention Encapsuler une requête sous forme dobjet paramétrer les clients avec différentes requêtes, files de requêtes logs de requêtes support dopérations réversibles (undo)

3 Motivation Le framework Swing émet des requêtes aux objets lorsque les items des menus sont activés les boutons sont cliqués. Swing ne peut pas implémenter ces requêtes car elles sont spécifiques aux applications. Comment émettre des requêtes à des objets sans rien connaître des opérations demandées ? ou sans rien connaître de celui à qui la requête est destinée ?

4 Motivation Le design pattern Command permet aux objets dun toolkit de faire des requêtes sur des objets dune application non-spécifiée en transformant la requête en un objet Cet objet est emmagasiné et transmis comme les autres objets. dissocie lobjet qui invoque une opération de lobjet qui possède les connaissances nécessaires pour réaliser cette opération. Flexibilité au niveau du design de linterface-usager. Partage de fonctionnalités Une application peut fournir un menu et un bouton pour une fonctionnalité juste en faisant en sorte que le menu et le bouton partagent une instance de la même sous-classe de Command. Remplacement dynamique des commandes Utile pour limplémentation de menus dépendants du contexte (context-sensitive menus). Définition de scripts par composition de commandes possible parce que lobjet qui émet la requête na besoin de ne savoir que comment lémettre, et non pas de savoir comment la requête va être exécutée. Toolkit: The property of the Java API that defines the look and feel of the user interface on a specific platform

5 Application : Toolkit

6 Commande simple

7 Commande complexe

8 Liste de commandes

9 Quand appliquer le patron Command? Pour paramétriser des objets par une action à exécuter Exemple: objets MenuItem Les commandes servent à remplacer les callback dans les langages orientés objets. Dans un langage procédural >>> une fonction callback function, une fonction enregistrée en quelque part qui doit être appelée plus tard Pour spécifier, mettre en file, et exécuter les requêtes à des moments différents Le cycle de vie dun objet Command est indépendant de la requête originale Pour implémenter des opérations réversibles. Lexécution de la commande peut conserver létat dans la commande elle- même pour inverser son effet. Ajout dune méthode unexecute Les commandes exécutées sont placées dans une liste.

10 Quand appliquer le patron Command? Pour implémenter un log des modifications de telle sorte que lon puisse les réappliquer en cas décroulement du système. Ajout des méthodes load et store Pour structurer un système à laide dopérations de haut niveau construites à partir dopérations primitives Transactions Une transaction encapsule un ensemble de modifications aux données.

11 Structure

12 Participants Command déclare une interface pour exécuter une opération. ConcreteCommand (PasteCommand, OpenCommand) Définit une liaison entre lobjet destinataire et laction Implémente execute par linvocation d opérations sur le destinataire. Client (Application) Crée un objet ConcreteCommand et assigne son destinataire. Invoker (MenuItem) Demande à la commande de sexécuter. Destinataire (Document, Application) Sait comment exécuter les opérations associées à la requête. Nimporte quelle classe peut agir comme destinataire.

13 Collaborations Le client crée lobjet ConcreteCommand et spécifie le destinataire. Lobjet Invoker emmagasine lobjet ConcreteCommand. Lobjet Invoker émet une requête en invoquant execute sur la commande. Lorsque la commande est réversible, ConcreteCommand emmagasine létat nécessaire pour revenir dans létat précédant linvocation de execute. Lobjet ConcreteCommand invoque les opérations du destinataire pour exécuter la requête.

14 Conséquences Le Command DP dissocie lobjet qui invoque une opération de celui qui sait comment lexécuter. Les commandes sont des objets à part entière. Elles peuvent être manipulées et étendues comme nimporte quel autre objet. On peut assembler des commandes pour former une commande composite. Composite pattern. Composite Cest facile dajouter de nouvelles commandes car il ne faut pas modifer les classes existantes.

15 Implémentation Jusquà quel point une commande devrait-elle être intelligente? À une extrême, seulement un lien entre un destinataire et les actions à effectuer. Commandes qui possèdent assez de connaissances pour trouver leur destinataire dynamiquement. A lautre extrême, la commande fait tout sans rien déléguer à un destinataire Pour définir des commandes indépendantes des classes existantes. Lorsquaucun destinataire acceptable nexiste. Une commande connaît son destinataire implicitement (création dune fenêtre)

16 Implémentation Implémentation de undo et redo Quel état faut-il conserver? Destinataire Arguments Valeurs originales de létat du destinataire qui ont pu être modifiées par la commande Combien de niveau de undo Seulement la dernière commande History list Une commande réversible peut devoir être clonée avant de la placer dans lhistorique pour distinguer diverses invocations de la même commande. Prototype DP Prototype

17 Implémentation Eviter laccumulation derreurs dans le processus de réversibilité Assurer un mécanisme undo/redo fiable préservant la sémantique Les erreurs peuvent saccumuler lorsque les commandes sont exécutés, inversées et réexécutées. Le Memento (283) DP peut être appliqué pour donner accès à linformation nécessaire pour restaurer un objet sans exposer les détails internes dun objet.Memento (283)

18 Exemple : Swing w /jw designpatterns.html

19

20 execute exit, le nom qui sera affiché dans le menu show dialog, le nom qui sera affiché dans le menu

21 Known Uses Perhaps the first example of the Command pattern appears in a paper by Lieberman [Lie85].Lie85 H. Lieberman. There's more to menu systems than meets the screen. SIGGRAPH Computer Graphics, pp. 181–189, San Francisco, July 1985 MacApp [App89] popularized the notion of commands for implementing undoable operations.App89 ET++ [WGM88], InterViews [LCI+92], and Unidraw [VL90] also define classes that follow the Command pattern.WGM88LCI+92VL90 InterViews defines an Action abstract class that provides command functionality. It also defines an ActionCallback template, parameterized by action method, that can instantiate command subclasses automatically. The THINK class library [Sym93b] also uses commands to support undoable actions.Sym93b Commands in THINK are called "Tasks." Task objects are passed along a Chain of Responsibility (223) for consumption.Chain of Responsibility (223) Unidraw's command objects are unique in that they can behave like messages. A Unidraw command may be sent to another object for interpretation, and the result of the interpretation varies with the receiving object. Moreover, the receiver may delegate the interpretation to another object, typically the receiver's parent in a larger structure as in a Chain of Responsibility. The receiver of a Unidraw command is thus computed rather than stored. Unidraw's interpretation mechanism depends on run-time type information. Coplien describes how to implement functors, objects that are functions, in C++ [Cop92]. He achieves a degree of transparency in their use by overloading the function call operator (operator()). The Command pattern is different; its focus is on maintaining a binding between a receiver and a function (i.e., action), not just maintaining a function.Cop92

22 Patterns reliés Composite >>> Macro-commandes Memento >>> conserver létat dun destinataire lorsquune commande est réversible. Prototype >>> Une commande qui doit être copiée avant dêtre placée dans un historique.

23 Références Gamma et al., Design Patterns,

24 Struts Struts, a popular open source JSP application framework from the Apache Software Foundation Struts But the most significant cog in the Struts wheel is an MVC framework that revolves around the Command pattern.

25 All Web applications, at their core, perform the same basic function: field HTTP requests and respond to those requests by performing some application-specific functionality. Struts provides a servletknown as the action servletthat handles HTTP requests and ultimately invokes an application-specific action. The Struts action servlet turns HTTP requests into actions, but as a developer employing Struts to implement Web applications, you can remain blissfully ignorant of how it worksthat's the beauty of application frameworks and the Command pattern. You simply need to know how to map an HTTP request to a Struts action, how to implement that action, and you're off and running.

26

27

28

29 The preceding configuration file maps the /simple URL to the actions.SimpleAction class. When the action servlet receives the /simple.do URL, it strips off the.do suffix and maps the URL to the actions.SimpleAction class. If an instance of that class does not exist, the action servlet creates one and invokes its execute() method.

30

31 The preceding action checks to see if a counter bean exists in the application scope; if not, it creates one and stores it there. Subsequently, the action invokes the counter bean's updateCount() method, which updates a counter stored in a file named.simpleActionCount. Then the action returns an ActionForward instance that points to a JSP mapped to the string fwd-page. That mapping, also defined in the Struts configuration file (see Example 4), resolves the string fwd-page to the forwardPage.jsp JSP. The action servlet subsequently forwards control to that JSP


Télécharger ppt "Command Design Pattern. Intention Encapsuler une requête sous forme dobjet paramétrer les clients avec différentes requêtes, files de requêtes logs de."

Présentations similaires


Annonces Google