Académique Documents
Professionnel Documents
Culture Documents
Patron de comportement
Strategy (1/4)
2
Intention
Définir une hiérarchie de classes pour une famille
d'algorithmes, encapsuler chacun d'eux, et les rendre
interchangeables
Les algorithmes varient indépendamment des clients qui les
utilisent
Exemple
Cas des classes ayant le même comportement et utilisant des
variantes d’un même algorithme : Encapsuler ces algorithmes
dans une classe (la stratégie)
Implémenter les “stratégies” dans les classes héritées
Évite les répétitions de code
1
08/12/2010
Strategy (2/4)
Patron de comportement
Strategy (3/4)
4
Structure
Context maintient une référence à l’objet Strategy. Il peut définir un
interface qui permet à l’objet Strategy d’accéder à ses données
Strategy déclare une interface commune à tous les algorithmes
ConcreteStrategy implémente l’algorithme en utilisant l’interface
Strategy
Déroulement
Le Context envoie les requêtes de ses clients à l’une de ses stratégies.
Les clients créent la classe concrète qui implémente l’algorithme.
Puis ils passent la classe au Context.
Enfin ils interagissent avec le Context exclusivement.
2
08/12/2010
Patron de comportement
Strategy (4/4)
5
Champs d’application
Lorsque de nombreuses classes associées ne diffèrent
que par leur comportement
Lorsqu’on a besoin de plusieurs variantes d’un
algorithme
Lorsqu’un algorithme utilise des données que les clients
ne doivent pas connaître
Lorsqu’une classe définit plusieurs comportements
Observer(1/3)
Motivation
Maintenir une cohérence entre des objets en relation, en évitant un
couplage trop fort entre ceux-ci qui réduirait leur réutilisation
Exemple: un élément graphique doit être mis à jour lorsque les
données applicatives qu’il affiche sont modifiées; bien que les
classes graphiques et les classes données applicatives travaillent
ensemble, elles doivent être indépendantes pour être réutilisables.
Intention
Définir une dépendance entre des objets pour que tous ceux qui
dépendent d’un objet modifié soient avertis du changement d’état et
mis à jour automatiquement
Solution
Les objets « observateur » délèguent la responsabilité de contrôle
d’un évènement à un objet central, le « sujet »
3
08/12/2010
Observer(2/3)
Observer(3/3)
4
08/12/2010
Patron de comportement
Command (1/5)
9
Intention
Encapsuler une requête comme un objet
Permettre de défaire des traitements (undo)
Exemple
Découpler les objets qui invoquent une action de ceux qui
l’exécutent
possible parce que l’objet qui émet la requête n’a besoin de ne
savoir que comment l’émettre, et non pas de savoir comment la
requête va être exécutée
Réaliser un traitement sans avoir besoin de savoir de quoi il
s’agit et de qui va l’effectuer
Command (2/5)
Structure
5
08/12/2010
Patron de comportement
Command (3/5)
11
L’objet ConcreteCommand
invoque les opérations du
destinataire pour exécuter la
requête.
Exemple : ToolKit
6
08/12/2010
Command (4/5)
Command
déclare une interface pour exécuter une opération.
ConcreteCommand (PasteCommand, OpenCommand)
Définit une liaison entre l’objet destinataire et l’action
Implémente “execute” par l’invocation d’ opérations sur le destinataire.
Client (Application)
Crée un objet ConcreteCommand et assigne son destinataire.
Invoker (MenuItem)
Demande à la commande de s’exécuter.
Destinataire (Document, Application)
Sait comment exécuter les opérations associées à la requête.
N’importe quelle classe peut agir comme destinataire.
Patron de comportement
Command (5/5)
14
Champs d’application
Défairedes requêtes (undo)
Paramétrer les objets par des actions
7
08/12/2010
Patron de comportement
Visitor (1/7)
15
Intention
Représenter UNE opération à effectuer sur les éléments
d’une structure
Permet de définir une nouvelle opération sans changer les
classes des éléments sur lesquels on opère
Exemple
Un arbre de syntaxe abstraite pour un compilateur, un outil
XML…Différents traitement sur le même arbre : type check,
optimisation, analyses…
Faire la somme des jours de congés des employés d’une
entreprise
Recensement des bébêtes
Visitor (2/7)
8
08/12/2010
Patron de comportement
Visitor (3/7)
17
Champs d’application
Une structure contient beaucoup de classes aux
interfaces différentes
Pour éviter la pollution des classes de la structure
Patron de comportement
Visitor (4/7)
18
Structure
ObjectStructure (le programme demandeur) peut
énumérer ses éléments de type Element et peut être un
Composite
Element définit une opération accept qui prend un
Visitor en paramètre
ConcreteElement implémente l’opération accept
9
08/12/2010
Patron de comportement
Visitor (5/7)
19
Structure
Visitor
déclare l’opération de visite pour chaque classe de ConcreteElement
dans la structure
La signature (et le nom) de l’opération identifie la classe qui envoie la
requête de visite au visiteur. Le visiteur détermine alors la classe
concrète et accède à l’élément directement
ConcreteVisitor
Implémente chaque opération déclarée par Visitor
Chaque opération implémente un fragment de l’algorithme, et un état
local peut être stocké pour accumuler les résultats de la traversée de
la structure
Patron de comportement
Visitor (6/7)
20
Déroulement
Un objectStructure parcours ses éléments (différentiation selon le type possible) et
envoie le visiteur (elt.accept(visiteur))
Les éléments appelent (à tour de rôle) l’opération du visiteur (visiteur.visit(this))
Le visiteur agrège les données aux travers d’appel de méthode des éléments
(paramètres de visit)
10
08/12/2010
Patron de comportement
Visitor (7/7)
21
Conséquences
Ajout de nouvelles opérations très facile
Groupement/séparation des opérations communes
Ajout de nouveaux ConcreteElement complexe (opération
dépendant du type…)
Visitor traverse des structures où les éléments sont de types
complètement différents / Iterator
Accumulation d’état dans le visiteur plutôt que dans des
arguments
Suppose que l’interface de ConcreteElement est assez riche
pour que le visiteur fasse son travail => cela force à
montrer l’état interne et à casser l’encapsulation
Patron de comportement
State (1/3)
22
Intention
Modifier le comportement d’un objet quand son état interne change
Obtenir des traitements en fonction de l'état courant
Tout est mis en place pour donner l’impression que l’objet lui même a été modifié
Exemple
Éviter les instructions conditionnelles de grande taille (if then else)
Simplifier l’ajout et la suppression d’un état et le comportement qui lui est
associé
Comportement des bébêtes avec mémoire de la position, de la vitesse et de la
direction (intelligence) avec décision de l’évolution de l’état
État d’un connexion réseau (recherche, établie, interrompue, fermée)
Champs d’application
Implanter une partie invariante d’un algorithme
Partager des comportements communs d’une hiérarchie de classes
11
08/12/2010
Patron de comportement
State (2/3)
23
Patron de comportement
State (3/3)
24
Structure
Context est une classe qui permet d’utiliser un objet à état et qui
gère une instance d’un objet ConcreteState
State définit une interface qui encapsule le comportement associé
avec un état particulier de Context
Les ConcretState implémentent un comportement associé avec
l’état de Context
Il revient soit à Context, soit aux ConcreteState de décider de
l’état qui succède à un autre état
Conséquences
Séparation des comportements relatifs à chaque état
transitions plus explicites
12
08/12/2010
Exemple(1/2)
Exemple(2/2)
13