Sie sind auf Seite 1von 13

Plan de la séance

La modélisation avec UML: introduction


aux patrons de conception Design
Patterns
ACDA – CPOO (M3105) M. Sassolas 1 Les patrons de conception
M3105

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

4 Patrons de comportement (semaine prochaine)


2 / 41

Plan de la séance Maintenant qu’on « connaı̂t » UML. . .

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

Structuration I Les même solutions s’appliquent. Structuration

Comportement I Des motifs (patterns) Comportement Cette année


apparaissent dans la conception On ne verra que quelques-un des patrons de conception.
(design) des programmes : les ,→ Le Gang of Four
design patterns. (GoF) en identifie 23.
Souvent, on utilise ces patrons (ou plutôt
En français, le terme patron de conception est utilisé, car on motifs. . .) sans s’en rendre compte.
s’en sert comme modèle.
5 / 41 6 / 41

Plan de la séance Plan de la séance

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

4 Patrons de comportement (semaine prochaine) 4 Patrons de comportement (semaine prochaine)

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()

Avantages de cette abstraction Le diagramme de classe complet


Avec un seul Truc

Design Design
Patterns Patterns

M. Sassolas M. Sassolas «interface»


M3105 M3105
CstrAbstrait
Cours 4 Cours 4

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

I On peut aisément étendre les Trucs avec une


Singleton Singleton

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

I Dans notre système, on veut pouvoir fournir de la


Cours 4 Cours 4
+userDoc() HtmlCreator
Patrons de
documentation en PDF ou en HTML. On envisage un jour Patrons de +userDoc()
+adminDoc()
conception
d’ajouter d’autres formats. conception +adminDoc()
Création Création +userDoc()
Fabrique abstraite I La documentation peut concerner l’utilisation de Fabrique abstraite
+adminDoc()
Singleton Singleton
l’interface ou la maintenance du serveur. Ces
Structuration Structuration
documentations différentes sont manipulée différemment ; PdfUserDoc UserDoc
Comportement Comportement
par exemple, l’accès à la documentation de maintenance
peut inclure une vérification des permissions. HtmlUserDoc
I Elle est générée à chaque demande afin de tenir compte DocHandler
des différentes versions de tous les modules installés. HtmlAdminDoc

PdfAdminDoc AdminDoc
13 / 41 14 / 41

Plan de la séance Problème

Design Design
Patterns Patterns

M. Sassolas M. Sassolas
M3105 M3105

Cours 4
1 Les patrons de conception Cours 4

Patrons de Patrons de I Une classe dont on ne veut qu’une seule instance.


conception conception
2 Patrons de création I Exemples courants : classe principale, classe de connexion
Création Création
Fabrique abstraite Fabrique abstraite (abstract factory) Fabrique abstraite à la base de donnée, constructeurs d’objets (cf fabrique
Singleton
Singleton Singleton

abstraite). . ..
Structuration Structuration

Comportement Comportement
3 Patrons de structuration ClasseÀInstanceUnique

4 Patrons de comportement (semaine prochaine)

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

+Instance() if (instance == null)


« constructor »–Singleton() // première instanciation
instance = new Singleton();
return instance;
17 / 41 18 / 41

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

instance = new PdfCreator(); Proxy


Décorateur (decorator)
Comportement
return instance; Façade (facade)
} Proxy
public UserDoc userDoc(){...}
public AdminDoc adminDoc(){...} 4 Patrons de comportement (semaine prochaine)
}
19 / 41 20 / 41

Plan de la séance Problème

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

Structuration 3 Patrons de structuration Structuration


Composite
Composite Composite
intro: Section corps: Section
Adaptateur Adaptateur
Décorateur
Façade
Adaptateur (adapter) Décorateur
Façade titre=« Machin » titre=« Bidule »
Proxy
Décorateur (decorator) Proxy
preambule= « Blublu » preambule= « »
Comportement Comportement
Façade (facade)
Proxy
para1: Section para2: Section
4 Patrons de comportement (semaine prochaine) titre=« Chose » titre=« Chouette »
21 / 41 22 / 41 preambule= « Blabli » preambule= « Toto »
Solution Solution

Design Design public class Feuille extends Arbre {


Patterns Patterns
Idée Idée ...
M. Sassolas M. Sassolas
M3105
I On divise en classe feuille et classe nœud qui héritent M3105
public
I On divise en Type
classegetAllAttr(){return
feuille et classe nœud quiattr;}
héritent
Cours 4
d’une classe principale.
Cours 4 ...
d’une classe principale.
Patrons de Patrons de }
conception I Les accès se font récursivement dans les descendants. conception I Les public
accès se class Nœud extends
font récursivement dansArbre{
les descendants.
...
Création
I Il faut prévoir des accesseurs pour ajouter/enlever des Création
I Il faut prévoir des accesseurs pour ajouter/enlever des
Structuration Structuration public Type getAllAttr(){
composants. composants.
Composite
Adaptateur
Composite
Adaptateur
Type res = attr;
Décorateur
Façade 0..*
Décorateur
Façade
for (Arbre desc: sousArbres) 0..* {
Proxy
Arbre Proxy
Arbre
res.append(desc.getAllAttr());
#sousArbres #sousArbres
Comportement Comportement
–attr : Type }; –attr : Type
Nœud Nœud
return res;
Feuille +getAllAttr() Feuille +getAllAttr()
}
+ajout() +getAllAttr() +ajout() +getAllAttr()
+retrait() ... +retrait()
+getAllAttr() +ajout() +getAllAttr()
} +ajout()
23 / 41 +retrait() 23 / 41 +retrait()

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

Patrons de 2 Patrons de création Patrons de PdfCreator


conception conception
HtmlCreator
Création Création
3 Patrons de structuration +docEntete()
Structuration Structuration +userDoc()
+simpleDocCorps()
Composite
Composite Composite
+adminDoc()
Adaptateur Adaptateur
+fullDocCorps()
Décorateur
Façade
Adaptateur (adapter) Décorateur
Façade
Proxy
Décorateur (decorator) Proxy

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

Structuration Interface Structuration


Composite Composite
public userDoc(){
Adaptateur
Décorateur
+opérationConcrètePart1() Adaptateur
Décorateur vraiCreator.docEntete();
Façade +opération() +opérationConcrètePart2() Façade #vraiCreator vraiCreator.simpleDocCorps();
Proxy Proxy

#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

Structuration 3 Patrons de structuration Structuration Pourquoi pas l’héritage ?


Composite I Pas très joli : hériter juste pour modifier une fonction,
Composite Composite
Adaptateur Adaptateur
Décorateur
Façade
Adaptateur (adapter) Décorateur
Façade
c’est moche.
Proxy
Décorateur (decorator) Proxy
I Moins flexible : si l’on veut ajouter d’autres extensions,
Comportement Comportement
Façade (facade) on change drastiquement le modèle.
Proxy

4 Patrons de comportement (semaine prochaine)


29 / 41 30 / 41

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

Comportement interface. Comportement


+opÀDécorer() DécorateurA DécorateurB
+opération()
+opÀdécorer() +opÀdécorer()
+opAuxiliaireA() +opAuxiliaireB()
31 / 41 32 / 41
Solution Solution
Diagramme de classes Diagramme de classes

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

Structuration 3 Patrons de structuration Structuration «interface» Client


Composite
Adaptateur
Composite Composite
Adaptateur
Documenté
Décorateur
Façade
Adaptateur (adapter) Décorateur
Façade
Proxy
Décorateur (decorator) Proxy
+adminDoc()
«interface»
Comportement Comportement
Façade (facade) +eventLog(int timeSpan)
Proxy DocCreator
Logger
4 Patrons de comportement (semaine prochaine) –events : String[] +userDoc()
+adminDoc()
34 / 41 35 / 41 +events(Date start, Date end)

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

M. Sassolas Documenteur M. Sassolas Documenteur


M3105
Documenté M3105
Documenté
Cours 4 Cours 4

Patrons de +adminDoc() Patrons de +adminDoc()


conception +eventLog(int timeSpan) conception +eventLog(int
... timeSpan)
Création Création
public eventLog(int timeSpan) {
Structuration Structuration
Composite Composite
Date now= new Date();
Adaptateur
Décorateur Logger
Adaptateur
Décorateur
Date
Logger old= new Date();
Façade Façade
old.goBack(timeSpan);
–events : String[] «interface» Logger.events(old,now); «interface»
–events : String[]
Proxy Proxy

Comportement Comportement
DocCreator } DocCreator
+events(Date start, Date end) +events(Date start, Date end)
...
+userDoc() +userDoc()
+adminDoc() +adminDoc()
37 / 41 37 / 41

Plan de la séance Problème

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

Création 2 Patrons de création


Structuration

Comportement
3 Patrons de structuration

4 Patrons de comportement (semaine prochaine)

41 / 41

Das könnte Ihnen auch gefallen