4. PRÉSENTATION PATTERNS COMPORTEMENTAUX
DÉFINITION
+ LES TROIS FAMILLES (SUIVANT LES DÉCOUPAGES…)
CONSTRUCTION
STRUCTURE
COMPORTEMENT
+ OBJECTIF
FOURNIR DES SOLUTIONS POUR DISTRIBUER LES TRAITEMENTS ET LES
ALGORITHMES ENTRE LES OBJETS
+ MOYENS
DISTRIBUTION PAR DÉLÉGATION OU HÉRITAGE
4
6. STRATEGY
VUE GLOBALE
PROBLÈME
• Un objet doit effectuer plusieurs traitements différents, dépendant
d’une variable ou d’un état
DESCRIPTION
• Vous avez une classe dédiée à une tâche spécifique. Dans un
premier temps, celle-ci effectue une opération suivant un
algorithme bien précis. Cependant, avec le temps, cette classe
sera amenée à évoluer, et elle suivra plusieurs algorithmes, tout
en effectuant la même tâche de base.
• Ex: format(), excecute(),…
SOLUTION
• Délégation du traitement à une classe externe et création d’une
famille d’algorithme
6
11. STATE
VUE GLOBALE
PROBLÈME
• Le comportement d’un objet est susceptible de changer en
fonction de son état (on ne peut pas clôturer un compte qui n’est
pas ouvert…)
DESCRIPTION
• Le pattern State permet à un objet d’adapter son comportement
en fonction de son état interne
• L’idée se représente bien par les diagrammes d’état UML
SOLUTION
• On délègue à des classes « état » le fait d’implémenter les
différent comportement de l’objet
11
13. STATE
LES CLASSES
StateMachine
• Classe concrète décrivant des objets qui sont des machines à
états. Cette classe maintient une référence sur l’interface State.
State
• Interface à implémenter regroupant les comportements qui sont
dépendants de l’état de l’objet
ConcreteState
• Les classes qui implémentent State et définissent les divers
comportements
13
17. VISITOR
VUE GLOBALE
PROBLÈME
• Vous voulez laissez la possibilité d’étendre le comportement de
votre objet sans pour autant en modifier le code
DESCRIPTION
• le but est de laisser l’opportunité à des classes Visiteur d’accéder
à l’instance de l’objet visiter pour modifier son comportement.
• C’est un design qui est souvent associé au design pattern
Composite
SOLUTION
• Tous les objets qui acceptent que leur comportement soit étendu
propose une méthode accessible au visiteur.
17
19. VISITOR
LES CLASSES
Visitor
• définit l'interface d'une visiteur. Elle déclare les méthodes de visite
des sous-classes concrètes de Element.
ConcreteVisitor
• sont des sous-classes concrètes de l'interface Visiteur. Elles
implémentent des comportements de visite des Element.
Element
• définit l'interface d'une élément. Elle déclare la méthode de
réception d'un objet Visiteur
ConcreteElement
• sont des sous-classes concrètes de l'interface Element. Elles
implémentent la méthode de réception. Elles possèdent des
données/attributs et méthodes différents.
19
23. ITERATOR
VUE GLOBALE
PROBLÈME
• Parcourir séquentiellement les éléments d'un objet composé.
DESCRIPTION
• Le système doit parcourir les éléments d'un objet complexe. La
classe de l'objet complexe peut varier.
• Cela est le cas des classes représentant des listes et des
ensembles en Java. Elles ont une méthode retournant un
itérateur, qui permet de parcourir les éléments.
SOLUTION
• Le Design Pattern permet d'isoler le parcours d'un agrégat dans
une classe Iterator
23
25. ITERATOR
LES CLASSES
Compose
• définit l'interface d'un objet composé permettant de créer un
Iterateur.
ConcreteCompose
• est une sous-classe de l'interface Compose. Elle est composée
d'éléments et implémente la méthode de création d'un Iterateur.
Iterateur
• définit l'interface de l'itérateur, qui permet d'accéder aux éléments
de l'objet Compose.
ConcreteIterateur
• est une sous-classe de l'inteface Iterateur. Elle fournit une
implémentation permettant de parcourir les éléments de
ConcreteCompose. Elle conserve la trace de la position courante.
25
28. OBSERVER
VUE GLOBALE
PROBLÈME
• Des objets dépendent de l’état d’un autre objet et veulent être
notifié d’un changement d’état de ce dernier
DESCRIPTION
• Le pattern Obserever a pour objectif de construire une
dépendance entre un sujet et des observateurs de sorte que
chaque modification du sujet soit notifiée aux observateurs afin
qu’il puissent mettre à jour leur état.
• Ex: Listener Swing,…
SOLUTION
• Ajouter une méthode update à tous les Observer et gérer une
liste d’Observer au niveau du Sujet
28
30. OBSERVER
LES CLASSES
Subject
• Classe abstraite qui introduit l’association avec les Observers
Observer
• Interface à implémenter pour recevoir des notifications
ConcreteSubject
• Classe d’implémentation d’un Subject. C’est lui qui envoie une
notif quand son état est modifié
ConcreteObserver
• Maintient une référence vers le subject et implémente la méthode
update(). Elle peut aussi demandé des infos au Subject sur son
état.
30