Académique Documents
Professionnel Documents
Culture Documents
GUENDOUZI W.
WWW.GUEND.JIMDO.COM
1
Plan
PATRON
• Définition
• Historique
• Avantage et inconvinients
PATRON GoF
• Description
• Classification
• Principes
• Patrons de création
• Patron de structure
• Patron de comportement
2
Patrons – définition –
3
Patrons – historique –
4
Patrons – avantages et inconvénients –
Avantages :
• réduire le temps de développement d’une application.
• faciliter la maintenance d’une application.
• faciliter la communication entre les différents développeurs
Inconvénients :
• difficulté à choisir le patron à utiliser
• nécessite de l’apprentissage et de l’expérience.
• les patrons sont nombreux
• les patrons peuvent dépendre d’autres patrons.
5
Patrons – différents patrons –
• Patrons de conception de GoF
• Patrons d’architecture (styles d’architecture)
• Patron d’architecture entreprise
• Patron d’utilisabilité
• …etc.
6
Patrons GoF
7
Description d’un patron de conception
Les patrons de conception sont représentés par :
• Nom : identifier le patrons
• Problématique : description du problème auquel il répond
• Solution : description de la solution souvent accompagnée d’un
schéma UML
• Conséquences : les avantages et les inconvénients de cette
solution (Conséquences de l’application du pattern)
• Autres
Exemples d’implémentation
Conseil d’implémentation
8
Classification des patrons GoF
Les patrons de conception sont classés en trois catégories (GoF).
• Patrons de Création (5) :
- Comment organiser et déléguer la création dynamique d’instances ?
Patterns FactoryMethod, AbstractFactory, Builder, Singleton
• Patrons de Structure (7) :
- Comment composer les classes et les objets pour obtenir des
structures plus complexes ?
- Travaillent essentiellement sur des aspects statiques, à « l’extérieur »
des classes
Bridge, Adapter et Composite (etc.)
9
Classification des patrons GoF
• Patrons de Comportement (11) :
- Comment faire collaborer classes ou objets pour construire une
partie de l’application et des traitements ?
- Travaillent essentiellement sur des aspects dynamiques, à « l’intérieur »
des classes et parfois au niveaux des instances
Strategy, Decorator, Observer, Visitor (etc.)
10
Classification des patrons GoF
11
Principes des patrons
• Implémentés différemment en fonction du langage de programmation
utilisé,
• Peuvent être modifiés ou adaptés selon les besoins du système,
• Formulés en termes de classes et d’objets (Exprimés sous forme
d’architecture reliant quelques classes très abstraites)
• Visent à améliorer la qualité du code :
- Souvent orientés vers le bon découpage en package (modularité, flexibilité,
réutilisabilité).
- Favorisent la composition sur l’héritage
- Reposent beaucoup sur les abstractions (interfaces, classes abstraites, Etc.) et
évitent les liens directs avec les classes concrètes
12
Patrons de création
-Singleton-
13
Patrons de création – singleton --
Problème : comment assurer une seule instanciation d’une classe et fournir
un point d’accès global à cette unique instance.
Solution :
• Créer un seul et unique constructeur avec un accès « private ».
• Créer un attribut statique, sa valeur est une instance privée de la classe :
sa valeur est instanciée une première fois, soit directement lors de sa
définition, soit dans la méthode getInstance()
• Créer une méthode publique d’accès à cette instance.
14
Patrons de création – singleton --
Implémentation :
15
Patrons de création – singleton --
Implémentation :
16
Patrons de création – singleton --
Implémentation : exemple 1
17
Patrons de création – singleton --
Implémentation : exemple 2
18
Patrons de création – singleton --
Conséquences :
19
Patrons de création
-Factory method-
20
Patrons de création – Factory method--
Problème : comment permettre à une classe de définir elle-même ses
propres objets à créer ?
Solution :
• Déléguer l’instanciation à des sous classes en utilisant une méthode
nommée la méthode « Factory » :
cette méthode permet de choisir une classes selon des critères de choix
puis l’instancier et retourner la référence de l’objet crée.
21
Patrons de création – Factory method--
• « Product » : définit l’interface des objets que la méthode Factory peut créer
• « ConcreteProduct » : implémente l’interface « product »
• « Creator » : déclare la méthode « Factory » et peut contenir des méthodes
(« operation ») qui font appel à la méthode « Factory »
• « ConcreteCreator » : implémente la méthode abstraite « Factory » qui retourne un
objet « Product » créé avec l’opérateur New.
22
Patrons de création – Factory method--
implémentation : exemple 1
23
Patrons de création – Factory method--
implémentation : exemple &
Méthode Main :
24
Patrons de création – Factory method--
Conséquences :
• Le client n’a pas besoin de savoir toutes les classes à instancier. Il a besoin
de l’interface ou la classe abstraite de l’objet à créer et la méthode
« Factory ».
• La méthode « Factory » encapsule la création d’objets ce qui peut être
utile quand le processus de création est complexe.
25
Patrons de structure
-Composite-
26
Patrons de structure – composite --
Problème : comment représenter une hiérarchie d’objets composants/
composés et les traiter uniformément (pas de distinction entre les
composants simples et leurs compositions)
Solution :
27
Patrons de structure – composite --
implémentation : exemple 1
28
Patrons de structure – composite --
implémentation : exemple 1
29
Patrons de structure – composite --
implémentation : exemple 1
30
Patrons de structure – composite --
implémentation : exemple 1
31
Patrons de structure – composite --
implémentation : exemple 2
32
Patrons de structure – composite --
Conséquence
33
Patrons de structure
-Proxy-
34
Patrons de structure – proxy --
Problème : comment contrôler l’accès à certains types d’objets (objets
distants, couteux en création ou nécessitant d’ètre sécurisés).
Solution :
Créer un objet représentatif qui contrôle l'accès à ces types d’objets : L’objet
proxy. Le client fait appel à l’objet représentatif « proxy » sans qu’il le sache
(le proxy joue le rôle de l’objet source, il fait passer les appels du client à
l’objet source).
Il existe trois variations du proxy:
• proxy distant : fournit un représentant local pour un objet distant.
• proxy virtuel : crée un objet coûteux à la demande.
• proxy de protection : contrôle l'accès à un objet. Il est utile lorsque l’objet
a différents droits d'accès.
35
Patrons de structure – proxy --
36
Patrons de structure – proxy --
Exemple : proxy virtuel
37
Patrons de structure – proxy --
Exemple : proxy virtuel
38
Patrons de structure – proxy --
Exemple : proxy virtuel
39
Patrons de structure – proxy --
Exemple : proxy virtuel
40
Patrons de structure – proxy --
Conséquence :
Cacher le faite que l’objet n’est pas créé (proxy virtuel) par l’ajout d’un
niveau supplémentaire d’indirection lors de l’accès à l’objet.
41
Patrons de comportement
-Observer-
42
Patrons de comportement – Observer --
Problème : comment assurer la cohérence entre des objets communiquant
entre eux tout en maintenant leur indépendance.
Solution :
Patron observer : définir une relation un à plusieurs entre les objets de telle
manière lorsqu’un objet se met à jours tous les objets dépendants soient
notifiés et mis à jour automatiquement.
43
Patrons de comportement – Observer --
44
Patrons de comportement – Observer --
Subject : l’interface représentant l’objet observé par un ou plusieurs
observateurs. Elle est utilisée pour l’enregistrement d’un objet en tant que
observer du subject
Observer : interface pour les objets devant être notifiés lors de MAJ du
subject. Elle contient la méthode update appelée lors du changement du
subject.
ConcreteSubject : implémente l’interface du subject. Elle contient la méthode
notifyObserver() utilisé lors de changements d’état pour MAJ les observers.
contient une référence vers les observers.
ConcreteObserver : implémente l’interface observer.
45
Patrons de comportement – Observer --
Implémentation : exemple 1
46
Patrons de comportement – Observer --
Implémentation : exemple 1
47
Patrons de comportement – Observer --
Résumé :
Dans le subject :
• Liste des observers
• Méthode d’ajout et de suppression d’un observer de la liste des observers
• Méthode NotifyObservers() qui parcourt la liste des observers et appelle
la méthode update
• Méthode qui fait des traitements spécifiques au subject et qui à la fin
appelle la méthode NotifyObservers() qui elle appel la méthode Update()
des observers
48
Patrons de comportement – Observer --
Résumé :
Dans l’observer :
• Référence vers le subject concerné (ou vers un attribut représentant son
état)
• Méthodes d’ajout et de suppression permettant à l’observer de s’ajouter
ou de se retirer de la liste des observers
• Méthode Update()
49
Patrons de comportement – Observer --
Implémentation : exemple 2
subject
observer
50
Patrons de comportement – Observer --
Implémentation : exemple 3 (observer dans le package java.util)
51
Patrons de comportement – Observer --
Implémentation : exemple 3 (Observer dans le package java.util)
52
Patrons de comportement – Observer --
Implémentation : exemple 3 (Observer dans le package java.util)
• Création du subject et de
l’observer.
• Ajouter l’observer à la liste des
observers par la méthode
addObserver(Observer o)
• Il existe aussi la méthode
deletObserver(Observer o).
53
Patrons de comportement – Observer --
Conséquence :
• Faible couplage entre le subject et l’observers
• Dans des scénarios complexes , il est difficile de déterminer si tous les
observers nécessitent un update ou uniquement certains d’entre eux.
54
Patrons de comportement
-Strategy-
55
Patrons de comportement – Strategy --
Problème : étant donné un ensemble de programmes de la même famille appelés
Stratégies et un programme appelé contexte qui les utilise de la même manière.
Comment permettre à ces différents programmes d’évoluer indépendamment de
ce programme (le contexte).
Solution :
Patron strategy :
• Encapsuler chaque stratégie dans une classe concrète puis concevoir une
interface (ou une classe abstraite) qui sera implémentée par les différentes
stratégies.
• Le contexte est représenté par une classe qui utilise l’interface des différentes
stratégies. Tous changement dans les stratégies est indépendant du contexte.
• Le client doit seulement choisir et instancier la classe stratégie qu’il veut
utiliser.
56
Patrons de comportement – Strategy --
57
Patrons de comportement – Strategy --
Implémentation : exemple
Stratégie 1 =>
Stratégie 2 =>
58
Patrons de comportement – Strategy --
Implémentation : exemple
Le contexte =>
59
Patrons de comportement – Strategy --
Implémentation : exemple
Le client =>
60
Patrons de comportement – Strategy --
Conséquence :
• Cacher les détails d’implémentation des différentes stratégies.
• Faciliter l’ajout et la suppression des stratégies.
• Simplifier le choix des stratégies.
• le client doit comprendre le principe des stratégies avant d’en choisir une.
61
Sources du cours
[1] Java design pattern. Rohit Joshi. Book, 2015.
[2] GoF Design Patterns with examples using Java and UML.
Benneth Christiansson et al., 2008.
[3] Software engineering. Ian Sommerville. Book, 9th edition,2011.
[4] Design Patterns : Outils pour la Gestion de Projets. Gauthier
Picard, 2007.
[5] Patrons de conception. Bruno Dufour, 2009.
[6] Design Pattern, Ilhem Boussaïd. USTHB, 2009.
[7] Patrons de Conception. Simon Urli, 2015.
62