15
Patrons de conception: Patrons de conception: décorateur F. Mallet [email protected] http://deptinfo.unice.fr/~fmallet/ 2011/2012 F. Mallet 6-1

Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

  • Upload
    vothu

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patrons de conception:Patrons de conception:décorateur

F. [email protected]

http://deptinfo.unice.fr/~fmallet/

2011/2012 F. Mallet 6-1

Page 2: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

MotivationMotivationLes besoins pour une bonne conception et p p

du bon code : ExtensibilitéExtensibilité Flexibilité Facilité à maintenir Facilité à maintenir Réutilisabilité Les qualités internes Les qualités internes Meilleure spécification, construction,

documentationdocumentation

2010/2011 2F. Mallet

Page 3: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

HistoriqueHistoriqueMVCGang of Four : Erich Gamma, Richard Helm,Ralph

Johnson, John VlissidesDéfinition de 23 patterns Définition de 23 patterns

Design Patterns – Elements of Reusable Object-Oriented Software Addison Wesley 1994Oriented Software, Addison Wesley, 1994

Un Design Pattern nomme, abstrait et identifie les aspects essentiels d’une structuration récurrente ceaspects essentiels d une structuration récurrente, ce qui permet de créer une modélisation orientée objet réutilisable

2010/2011 3F. Mallet

Page 4: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

ClassificationClassificationCréation Comment un objet peut être créé Indépendance entre la manière de créer et la manière

d’utiliserd utiliserStructure Comment les objets peuvent être combinés Indépendance entre les objets et les connexions

Comportement Comment les objets communiquent Encapsulation de processus (ex : observer/observable)

2010/2011 4F. Mallet

Page 5: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

Patrons de structurePatrons de structure Adapter pattern

adapter une interface à une autrep Bridge pattern

conserver l’interface d’un programme client tandis que le comportement du programme serveur peut être changé. p g p g

Composite pattern composer des objets ensembles (structure d’arbre)

Decorator pattern Decorator pattern encapsuler dynamiquement des objets et leur fournir de nouvelles fonctions

Façade patternhié hi l i t f i l d i l’ té i regrouper une hiérarchie complexe en une interface simple depuis l’extérieur

Flyweight pattern limiter la prolifération d’instances petites, simples et similaires en factorisant hors

d l d d é é è l d’ l d é h ddes classes des données passées en paramètre lors d’appel de méthode Proxy pattern

remplacer un objet le temps de le créer

2011/2012 5F. Mallet

Page 6: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

Décorateur / DecoratorDécorateur / DecoratorIntention Attacher dynamiquement des capacités additionnelles

à un objetF i i i lt ti fl ibl à l’hé it Fournir ainsi une alternative flexible à l’héritage pour étendre les fonctionnalités

ExempleExemple Ajout de capacités pour objet individuellement et

dynamiquementdynamiquement Englober l’objet existant dans un autre objet qui

ajoute les capacités (plus que d’hériter) ex : JScrollPane

Synonyme : Wrapper (attention !)F. Mallet - Miage M1 6

Page 7: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

Champs d’applicationChamps d application

Champs d’applicationC a ps d app ca o Pour ajouter des capacités de manière

transparentetransparente Pour des capacités qui peuvent être retirées

Q ’ é Quand l’extension par héritage produirait un nombre trop important d’extensions i dé dindépendantes Quand l’héritage est interdit

F. Mallet - Miage M1 7

Page 8: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

Example1Example1Décorateur : Compteurp

Ajout de propriétés sans perturber l’utilisateur

2011/2012 F. Mallet 8

Page 9: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

Example2Example2Décorateur : Temperaturep

Ajout de propriétés sans perturber l’utilisateur

Consistance ?Kelvin ? Centigrade ? Rankine ? Réaumur ?

Delisle ? Newton ?Delisle ? Newton ?

Centigrade ?

2011/2012 F. Mallet 9

Page 10: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

Example2Example2Décorateur : Temperaturep

Ajout de propriétés sans perturber l’utilisateur

C l i ?Celsius ?Fahrenheit ?

Celsius ?Fahrenheit ?

2011/2012 F. Mallet 10

Page 11: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

Example2Example2Décorateur : Temperaturep

Ajout de propriétés sans perturber l’utilisateur

2011/2012 F. Mallet 11

Page 12: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

En JavaEn Java

Temperatureclass Temperature

implements ITemperature {

CelsiusVersFahrenheitclass CelsiusVersFahrenheit

implements ITemperature {implements ITemperature {private double valeur;Temperature(double v) {this.valeur = v;

implements ITemperature {private ITemperature celsius;CelsiusVersFahrenheit(ITemperature c){this.celsius = c;

}

public double get() { return valeur;

}

public double get() { return celsius get()*9/5+32;return valeur;

}public void set(double v) {this.valeur = v;

return celsius.get()*9/5+32; }public void set(double fahr) {celsius.set((fahr-32)*9/5);

}}

(( ) / )}

}

2011/2012 F. Mallet 12

Page 13: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

Example 3Example 3 Flot de caractèresi t f Fl tC t {

Codage de Césarclass CodeCesar implements

interface FlotCaractere {void print(String s);

}class VersWriter implements

FlotCaractere {int cle;FlotCaractere flot;C d C (i t lclass VersWriter implements

FlotCaractere {PrintWriter pw;

CodeCesar(int cle,FlotCaractere flot) {

this.cle = cle;this.flot = flot

VersFichier(Writer w) {PrintWriter pw =

new PrintWriter(w);}

}public void print(String s) {char[] b = s.toCharArray();

}public void print(String s) {pw.println(s);

}

for(int i=0; i<b.length;i++){int c=((b[i]-'A')+cle)%25;b[i] = c+'A';

}}

}flot.print(new String(b));

}}

F. Mallet - Miage M1 13

}

Adaptateur ! Décorateur !

Page 14: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

Example 3Example 3 Flot de caractèresi t f Fl tC t {

Décodage de Césarclass DecodeCesar implements

interface FlotCaractere {void print(String s);

}class VersWriter implements

FlotCaractere {int cle;FlotCaractere flot;D d C (i t lclass VersWriter implements

FlotCaractere {PrintWriter pw;

DecodeCesar(int cle,FlotCaractere flot) {

this.cle = cle;this.flot = flot

VersFichier(Writer w) {PrintWriter pw =

new PrintWriter(w);}

}public void print(String s) {char[] b = s.toCharArray();

}public void print(String s) {pw.println(s);

}

for(int i=0; i<b.length;i++){int c=((b[i]-'A')-cle+25)%25;b[i] = c+'A';

}}

}flot.print(new String(b));

}}

F. Mallet - Miage M1 14

}

Adaptateur ! Décorateur !

Page 15: Patrons de conception:Patrons de conception: décorateurmiageprojet2.unice.fr/@api/deki/files/1456/=05_Decorateur.pdf · Design Patterns – Elements of ... Adapter pattern adapter

Patron de structure: décorateur

RésuméRésuméImplémentationp Java : utilisation d’interfaces pour la conformité Pas forcément besoin d’un décorateur abstrait Maintenir une classe de base légère Decorator est fait pour le changement d’aspect, eco ato est a t pou e c a ge e t d aspect,

Strategy est fait pour le changement radical d’approche

Conséquences Personnalisation d’objets sans héritagej g Perte de type (perte de la relation « est-un ») Multiplication des classes (les décorations)

F. Mallet - Miage M1 15

p ( )