Beruflich Dokumente
Kultur Dokumente
Cours 4
2 Patrons de création
Mathieu Sassolas Patrons de Fabrique abstraite (abstract factory)
conception
Singleton
IUT de Sénart Fontainebleau Création
Département Informatique Structuration
3 Patrons de structuration
Comportement
Année 2015-2016 Composite
Cours 4 Adaptateur (adapter)
Décorateur (decorator)
Façade (facade)
Proxy
Design Design
Patterns Patterns
M. Sassolas M. Sassolas
M3105 M3105
I On a vu la syntaxe d’UML.
Cours 4 Cours 4
1 Les patrons de conception
Patrons de Patrons de
conception conception I Le meilleur moyen de s’exercer à la conception est de
Création 2 Patrons de création Création concevoir.
I Problème :
Structuration Structuration
Comportement Comportement
3 Patrons de structuration Professeur : « Construisez le diagramme de classe du
système qui. . .
4 Patrons de comportement (semaine prochaine) Étudiant : Je ne sais pas par où commencer ».
I Solution : fournir quelques recettes de base.
3 / 41 4 / 41
Historique des patrons de conception Les types de patrons de conception
Design Design
Patterns
I Lorsque les modèles ont Patterns Construction : donnent des manières de créer de nouveaux
M. Sassolas
commencé à s’unifier dans la
M. Sassolas objets.
M3105 M3105
Cours 4 syntaxe, on a remarqué que les Cours 4 Structuration : donnent des structure de programmes.
Patrons de même problèmes revenaient Patrons de Comportement : donnent des moyens d’interaction entre objets
conception conception
souvent. (qui du coup contraignent la structure).
Création Création
Design Design
Patterns Patterns
M. Sassolas M. Sassolas
M3105 M3105
Cours 4
1 Les patrons de conception Cours 4
1 Les patrons de conception
Patrons de Patrons de
conception conception
2 Patrons de création 2 Patrons de création
Création Création
Fabrique abstraite Fabrique abstraite (abstract factory) Fabrique abstraite Fabrique abstraite (abstract factory)
Singleton
Singleton Singleton
Singleton
Structuration Structuration
Comportement Comportement
3 Patrons de structuration 3 Patrons de structuration
7 / 41 8 / 41
Problème Idée de la solution
Design
Patterns
Des objets dont le type précis n’est pas forcément connu Design
Patterns I Puisque les objets que l’on crée sont des concrétisations
M. Sassolas sont créés par des classes constructrices. M. Sassolas d’objets abstraits, on peut également abstraire les
M3105
Cours 4 TrucAbstrait1
M3105
Cours 4
constructeurs.
I On abstrait les constructeurs par une interface.
Patrons de Patrons de
conception conception
«interface»
Création Création
Fabrique abstraite TrucConcretA1 TrucConcretB1 Fabrique abstraite CstrAbstrait
Singleton Singleton
Structuration
<<create>> <<create>> Structuration
Comportement Comportement
+createTruc1()
CstrA CstrB +createTruc2()
+createTruc1() +createTruc1()
TrucAbstrait2
+createTruc2() +createTruc2() CstrA CstrB
<<create>> <<create>>
+createTruc1() +createTruc1()
TrucConcretA2 TrucConcretB2
9 / 41 10 / 41 +createTruc2() +createTruc2()
Design Design
Patterns Patterns
Patrons de Patrons de
conception
I Un « client » qui manipule des Trucs n’a pas besoin de conception +createTruc()
Client
Création Création
Fabrique abstraite
connaı̂tre les détails de l’implémentation du Truc. Fabrique abstraite
Structuration Structuration
Comportement
implémentation TrucConcretC simplement en fournissant Comportement CstrA TrucAbstrait CstrB
la classe constructeur idoine CstrC.
+createTruc() +createTruc()
<<create>>
<<create>>
TrucConcretA TrucConcretB
11 / 41 12 / 41
Exemple : le problème Exemple
Design Design
Patterns Patterns «interface»
PdfCreator
M. Sassolas M. Sassolas DocCreator
M3105 M3105
PdfAdminDoc AdminDoc
13 / 41 14 / 41
Design Design
Patterns Patterns
M. Sassolas M. Sassolas
M3105 M3105
Cours 4
1 Les patrons de conception Cours 4
abstraite). . ..
Structuration Structuration
Comportement Comportement
3 Patrons de structuration ClasseÀInstanceUnique
15 / 41 16 / 41
Solution Remarques
Design Design
Patterns Patterns
M. Sassolas
Idée M. Sassolas
M3105
I La classe dispose d’un attribut de classe (static) du M3105
Cours 4 Cours 4
même type qui pointe vers l’unique instance.
Patrons de Patrons de
conception I À la première instanciation, cet attribut est mis à jour. conception
I L’appel de l’instance de la classe se fait donc par
Création
Fabrique abstraite
I Pour les suivantes, on renvoie en fait le premier. Création
Fabrique abstraite
Singleton.Instance() et non par new Singleton().
I Le véritable constructeur est privé. I On utilise un autre « constructeur » Instance() car sinon
Singleton Singleton
Structuration Structuration
Comportement Comportement
on aurait une récursion infinie lors de la première
Singleton instanciation.
– instance : Singleton = null
Exemple Exemple
Design Design
Patterns Patterns
PdfCreator PdfCreator
M. Sassolas M. Sassolas
M3105 M3105
instance : PdfCreator = null instance : PdfCreator = null
Cours 4 Cours 4
public class PdfCreator implements DocCreator {
Patrons de « constructor »–PdfCreator() Patrons de « constructor »–PdfCreator()
private static PdfCreator instance = null;
conception conception
+Instance() : PdfCreator +Instance() : PdfCreator
Création Création private PdfCreator(){}
+userDoc() : UserDoc +userDoc() : UserDoc
Fabrique abstraite
Singleton +adminDoc() : AdminDoc
Fabrique abstraite
Singleton
public static
+adminDoc() PdfCreator Instance(){
: AdminDoc
Structuration Structuration if (instance == null)
Comportement Comportement // première instanciation
instance = new PdfCreator();
return instance;
}
public UserDoc userDoc(){...}
public AdminDoc adminDoc(){...}
}
19 / 41 19 / 41
Exemple Plan de la séance
Design Design
Patterns Patterns
PdfCreator
M. Sassolas M. Sassolas
M3105 M3105
1 Les patrons de conception
instance : PdfCreator = null
Cours 4 Cours 4
public class PdfCreator implements DocCreator {
Patrons de « constructor »–PdfCreator()
private static PdfCreator instance = null; Patrons de 2 Patrons de création
conception conception
+Instance() : PdfCreator
... private PdfCreator(){}
Création Création
+userDoc() : UserDoc
thePdfCreator = PdfCreator.Instance();
Fabrique abstraite
Singleton
public static
+adminDoc() : PdfCreator Instance(){
AdminDoc Structuration 3 Patrons de structuration
AdminDoc freshPdfAdmDoc
if (instance == null) = thePdfCreator.adminDoc(); Composite
Composite
Structuration Adaptateur
Comportement
... // première instanciation Décorateur
Adaptateur (adapter)
Façade
Design
Patterns
Design
Patterns
Nos objets sont organisés en arbre. Il faut pouvoir les
M. Sassolas M. Sassolas parcourir.
M3105
1 Les patrons de conception M3105
document: Section
Cours 4 Cours 4
titre=« Truc »
Patrons de
conception
2 Patrons de création Patrons de
conception
preambule= « Blablabla »
Création Création
Exemple Exemple
public class Paragraphe extends Texte {
Design Design ...
Patterns Patterns
Texte 0..* public int longueur(){ Texte 0..*
M. Sassolas M. Sassolas
M3105
#sousSection M3105
#sousSection
return (titre.length() + préambule.length());
Cours 4
–titre : String Cours 4 } –titre : String
–préambule : String –préambule : String
Patrons de Patrons de ...
public class Section extends Texte{
conception conception
+longueur() : int }... +longueur() : int
Création Création
+ajout(txt : Texte) +ajout(txt : Texte)
public int longueur(){
Structuration Structuration
Composite
+retrait(index : int) Composite int res = 0; +retrait(index : int)
Adaptateur Adaptateur
Décorateur Décorateur res = res + titre.length() + préambule.length();
Façade Façade
Proxy Proxy for (Texte subsec: sousSections) {
Comportement Comportement res= res + subsec.longueur();
Section Section
Paragraphe };
Paragraphe
return res;
+longueur() +longueur()
}
+longueur() +ajout(txt : Texte) +longueur() +ajout(txt : Texte)
+retrait(index : int)
... +retrait(index : int)
24 / 41 24 / 41 }
Plan de la séance Problème
Design
Patterns
Design
Patterns
Les différentes implémentations d’une même fonctionnalité
M. Sassolas M. Sassolas sont fournies avec des noms différents, voire en plusieurs
1 Les patrons de conception
M3105 M3105
parties.
Cours 4 Cours 4
Comportement
Façade (facade) Comportement
C’est le cas lorsque. . .
Proxy I On travaille avec des classes/composants créés par
quelqu’un d’autre (importées).
4 Patrons de comportement (semaine prochaine) I On a mal conçu le système au premier abord (il aurait
25 / 41 26 / 41 fallu utiliser une fabrique abstraite).
Solution Exemple
Design Design
Patterns Idée Patterns «interface»
PdfCreatorAdaptateur
M. Sassolas Une classe Adaptateur s’occupe de la traduction entre les M. Sassolas DocCreator
M3105 M3105
Cours 4
méthodes demandées par l’interface et les méthodes Cours 4
+userDoc()
implémentées par l’Adapté. +userDoc()
Patrons de Patrons de +adminDoc()
conception conception +adminDoc()
Création «interface» Adapté Création
#adapté 1 }
Comportement Comportement 1
PdfCreator
HtmlCreator
public opération(){
Adaptateur
adapté.opérationConcrètePart1();
adapté.opérationConcrètePart2(); +docEntete()
+userDoc()
+opération() } +simpleDocCorps()
27 / 41 28 / 41 +adminDoc()
+fullDocCorps()
Plan de la séance Problème
Design Design
Patterns Patterns
M. Sassolas M. Sassolas
M3105
1 Les patrons de conception M3105
Cours 4 Cours 4 On veut étendre une (ou deux) opération de base dans certains
Patrons de 2 Patrons de création Patrons de cas autrement que par héritages.
conception conception
Création Création
Solution Solution
Idée Diagramme de classes
Design Design
Patterns Patterns
M. Sassolas M. Sassolas
M3105 M3105
«interface»
Décorateur
Cours 4 Cours 4
Abstraction
Patrons de
conception I On définit un Décorateur qui pointe vers l’objet de base Patrons de
conception
et redéfinit seulement l’opération en question. +opÀDécorer()
Création Création +opÀDécorer()
Structuration
Composite
I On peut définir plusieurs versions (d’autres extensions) en Structuration
Composite
Adaptateur héritant du décorateur. Adaptateur
Décorateur Décorateur
Façade
I Le décorateur et la classe de base sont abstraits par une Façade ClasseDeBase #composant
Proxy Proxy
Design Design
Patterns Patterns
public class DécorateurA extends Décorateur {
M. Sassolas M. Sassolas
M3105
«interface» M3105
public opÀDécorer(){
«interface»
Décorateur super.opÀDécorer(); Décorateur
Cours 4
Abstraction Cours 4
Abstraction
Patrons de Patrons de opAuxiliaireA();
conception conception
+opÀDécorer() } +opÀDécorer()
Création +opÀDécorer() Création +opÀDécorer()
Structuration Structuration
public opAuxiliaireA(){...}
Composite Composite }
Adaptateur Adaptateur
Décorateur Décorateur
Façade ClasseDeBase #composant Façade ClasseDeBase #composant
Proxy Proxy
public abstract class Décorateur {
Comportement Comportement
+opÀDécorer() ...
DécorateurA DécorateurB +opÀDécorer() DécorateurA DécorateurB
+opération() public opÀDécorer(){ +opération()
composant.opÀDécorer();
+opÀdécorer() +opÀdécorer() +opÀdécorer() +opÀdécorer()
}
+opAuxiliaireA() +opAuxiliaireB() +opAuxiliaireA() +opAuxiliaireB()
32 / 41 } 32 / 41
Exemple Exemple
public abstract class HtmlUserDecorator {
Design Design
Patterns Patterns
protected HtmlCreator baseDoc;
M. Sassolas
«interface» M. Sassolas public HtmlUserDecorator(HtmlCreator theDoc){
«interface»
M3105 HtmlUserDecorator M3105
this.baseDoc = theDoc; HtmlUserDecorator
Cours 4
HtmlCreatorAbs Cours 4
HtmlCreatorAbs
}
Patrons de Patrons de
conception +userDoc() : UserDoc conception public UserDoc userDoc(){ +userDoc() : UserDoc
+userDoc() : UserDoc +userDoc() : UserDoc
Création Création return baseDoc.userDoc();
Structuration Structuration }
Composite Composite
Adaptateur Adaptateur }
Décorateur Décorateur
Façade Façade ...
Proxy #baseDoc Proxy #baseDoc
public UserDoc userDoc() {
Comportement HtmlCreator Comportement HtmlCreator
Copyrighter UserDoc res = super.userDoc(); Copyrighter
res.append("<!-- Copyright 2014 IUT S&M -->");
+userDoc() : UserDoc +userDoc()
return: UserDoc
res;
+userDoc() : UserDoc +userDoc() : UserDoc
+adminDoc() : AdminDoc +adminDoc()
} : AdminDoc
33 / 41 33 / 41
...
Plan de la séance Problème
Design
Patterns
Design
Patterns I Besoin d’une interface qui implémente certaines fonctions.
M. Sassolas
1 Les patrons de conception M. Sassolas I Ces fonctions sont implémentées mais par différentes
M3105
Cours 4
M3105
Cours 4
classes/interfaces.
I Ou bien il ne manque pas grand chose pour les
Patrons de 2 Patrons de création Patrons de
conception conception implémenter depuis ces fonctions.
Création Création
Solution Solution
Design Design
Patterns Idée Patterns Idée
M. Sassolas Regrouper dans une classe fournissant l’interface tout ce dont M. Sassolas Regrouper dans une classe fournissant l’interface tout ce dont
on a besoin en le « piochant » ailleurs. on a besoin en le « piochant » ailleurs.
M3105 M3105
Cours 4 Cours 4
Patrons de Patrons de
conception conception
...
Facade public op1() Facade
{
Création Création
Structuration
Besoin Structuration ClasseA.op2A(); Besoin
Composite
Adaptateur
+op1() Composite
Adaptateur
} +op1() ...
Décorateur +op2(TypeY arg1, TypeX arg2) Décorateur +op2(TypeY arg1, TypeX arg2)
... public op2(TypeY arg1, TypeX arg2) {
Façade
+op3() Abstract
Façade
+op3() Abstract
Proxy Proxy
Interface.opInter(arg2,arg1);
Comportement Comportement
} ...
«interface» «interface»
...
ClasseA public op3() {
ClasseA
Interface ClasseB Interface ClasseB
ClasseA.op1A();
+op1A() }
+op1A()
+opInter(TypeX arg1, TypeY arg2) +opB() +opInter(TypeX arg1, TypeY arg2) ... +opB()
36 / 41 +op2A() 36 / 41 +op2A()
Exemple Exemple
Design Design
Patterns Patterns
Comportement Comportement
DocCreator } DocCreator
+events(Date start, Date end) +events(Date start, Date end)
...
+userDoc() +userDoc()
+adminDoc() +adminDoc()
37 / 41 37 / 41
Design Design
Patterns Patterns
M. Sassolas M. Sassolas
M3105
1 Les patrons de conception M3105 I Un objet est coûteux à invoquer, on ne veut pas le créer
Cours 4 Cours 4
vraiment tant qu’on n’en a pas besoin.
Patrons de 2 Patrons de création Patrons de
conception conception I Ou un objet est sur une autre ressource, que l’on ne veut
Création Création pas utiliser à chaque fois.
3 Patrons de structuration
Structuration Structuration
I Ou bien un objet nécessite des droits d’accès que l’on veut
Composite
Composite Composite
Adaptateur Adaptateur
vérifier à chaque accès ; on souhaite également séparer la
Décorateur
Adaptateur (adapter) Décorateur
Façade Façade vérification de l’accès.
Proxy
Décorateur (decorator) Proxy
Comportement Comportement
Façade (facade) Exemple
Proxy
C’est le cas des Query vers les bases de donnée en Java : la
requête n’est vraiment exécutée que sur demande expresse.
4 Patrons de comportement (semaine prochaine)
38 / 41 39 / 41
Solution Solution
public class ClasseProxy implements ClasseAbstraite {
protected ClasseRéelle sujet = null;
public op1(){
Design Design
Patterns Idée Patterns ifIdée
(sujet == null) {
M. Sassolas La classe est abstraite par une interface implémentée M. Sassolas sujet
La classe= new ClasseRéelle();
est abstraite par une interface implémentée
à la fois par le proxy et par la « vraie » classe. à la fois par le proxy et par la « vraie » classe.
M3105 M3105
Cours 4 Cours 4
// Création
Patrons de Patrons de
}
conception «interface» conception sujet.op1(); // Délégation«interface»
Création ClasseAbstraite Création } ClasseAbstraite
Structuration Structuration
Composite Composite
public op2(){
Adaptateur
+op1() Adaptateur if (sujet == null)+op1() {
Décorateur Décorateur
Façade +op2() Façade println("Erreur"); +op2()
Proxy Proxy
Comportement Comportement
}else{
ClasseRéelle sujet.autreOp();
ClasseRéelle
ClasseProxy sujet.op2(); // Délégation ClasseProxy
1 } 1
+op1() +op1()
#sujet +op1() } #sujet +op1()
+op2() +op2()
+op2() +op2()
40 / 41 +autreOp() 40 / 41 } +autreOp()
Plan de la séance
Design
Patterns
M. Sassolas
M3105
Cours 4
1 Les patrons de conception
Patrons de
conception
Comportement
3 Patrons de structuration
41 / 41