Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
François Schwarzentruber
ENS Cachan – Antenne de Bretagne
Qu'est ce qu'un patron de conception ?
Même problématiques
Même concepts
de génie logiciel
Comme l'extension
est galoisienne... A notre problème,
appliquons le
patron « Visiteur » !
La crème anglaise
sera parfaite avec
le gâteau.
Plan (un cours « catalogue de bonnes recettes de
cuisine »)
● Patrons de création
● Patrons de structure
● Patrons de comportement
Patrons de création
Windows
Linux
MacOS
Android
Besoin : adapter le logiciel pour différents publics
enfants
lycéens
Constat : on a créé des objets un peu partout !
new
new
new
new
new
Solution non maintenable
b = new BriqueEffacerTout() ;
if(pourlesEnfants)
{
b = new briqueEffacerToutPourEnfant() ;
}
else
{
b = new briqueEffacerToutPourLyceen() ;
}
Patron de conception : fabrique abstraite
On va devoir adapter
notre On applique
logiciel d'algorithmique le patron de
à deux publics. conception
« fabrique abstraite ».
Comment faire ?
Solution : isoler la création des objets dans des
« fabriques abstraites »
Fabrique
de briques
stp, fabrique moi pour les enfants
une brique
« EffacerTout »
t
effacer tou
Solution : isoler la création des objets dans des
« fabriques abstraites »
Fabrique
de briques
stp, fabrique moi pour les lycéens
une brique
« EffacerTout »
effacer tout
Bonne solution
b = new BriqueEffacerTout() ;
FabriqueAbstraite
fabriqueBriques
= new FabriqueEnfant()
fabriqueBriques.getNouvelleBriqueEffacerTout()
Patron de conception : fabrique abstraite
Patron de conception : fabrique abstraite
Diagramme de séquence de la fabrique abstraite
new Maison(Color.RED,
Color.WHITE, 16, 32, 16)
new Arbre(Color.GREEN,
Color.BROWN, 8, 32, 8)
A faire
Source : wikipedia
Conclusion sur le patron « Prototype »
12
10
8
Column 1
6 Column 2
4 Column 3
2
0
Row 1 Row 2 Row 3 Row 4
ObjetGraphique OpenOfficeGraphics
width
getBounds() : Rect height
source : Wikipedia
Patron « façade » : à un besoin simple, une interface
simple
Mon besoin :
Interpréteur
(+ (* 2 3) 5) 11
Scheme
Patron « façade » : à un besoin simple, une interface
simple
Source : Patterns in Java, Volume 1: A Catalog of Reusable Design Patterns Illustrated with UML, Second Edition by Mark Grand
Différence entre le patron « Façade » et « Adaptateur »
Façade Adaptateur
● But : créer une interface ● But : offrir une interface
simplifiée à une conforme et adapter une
bibliothèque complexe à classe
utiliser
Patron « Composite »
Objets récursifs :
● Arborescence de fichiers
● Expressions
● Structure d'un document
● Commande (on verra plus tard)
● Etc.
Patron « Composite »
Source : wikibooks
Patron « Décoration »
on aurait 2n
classes
différentes !
Patron « Décoration » utilise la délégation
(interface ● Avec la
d'une fenêtre) délégation on a
O(n) classes.
(décorateur abstrait)
(fenêtre)
(décorateur concret
comme « fenêtre avec
un fond »)
Conclusion sur le patron « Décorateur »
Données
Ces deux
zones de
l'écran
(observateurs)
écoutent les
données
(sujets).
Diagramme de classe du modèle Observateur
Autre application de « Observateur » : gestion des
entrées/sorties
utilisateur
contrôleur
vue modèle
Autre application de « Observateur » : conversions de
données d'un format vers un autre
LaTEX vers
Fichier Fichier
OpenOffice.Writer
.tex .odt
Autre application de « Observateur » : conversions de
données d'un format vers un autre
Emetteur Nouveau
Fichier paragraphe
LaTEX
.tex
Nouvelle
Emetteur page
Fichier
HTML
.html
Emetteur
Fichier
OpenOffice.Writer
.tex
Autre application de « Observateur » : conversions de
données d'un format vers un autre
Nouveau
paragraphe Générateur Fichier
LaTEX .tex
Nouvelle
page
Générateur Fichier
HTML .html
Générateur Fichier
OpenOffice.Writer .odt
Autre application de « Observateur » : conversion de
données d'un format vers un autre
Emetteur
Fichier LaTEX
.tex
No grap
pa
ra
uv
ea he
u
Générateur Fichier
HTML .html
Patron de conception « Commande »
On va devoir mettre
une fonction
« annuler » On applique
dans le logiciel. le patron de
conception
Comment faire ? « Commande ».
Si on suit le principe « une action = une opération »
Problèmes
commande « copier »
dessin
Patron de conception « Commande »
Diagramme de séquence
Memento
DocumentElement
getTableOfContents()
getSizeInBytes()
getNumberOfSection()
getNumberOfFigure()
checkSpelling()
checkGrammar()
...
heros.move()
tableau.sort()
BubbleSort ?
QuickSort ?
HeapSort ?
Exemple 3 : s'abstraire d'un algorithme de positionnement
d'élément graphique à l'écran
container.doLayout()
Source : http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html
Stratégie
Exemple
Patron de conception « état »
Patron de conception « état »
Patron de conception « état »
:
public void setEtat(EtatDessin nouvelEtat) {
this.monEtat = nouvelEtat;
}