Les Designs Patterns en Java 9782744040979
-
Upload
kamal-sadki -
Category
Documents
-
view
224 -
download
0
Transcript of Les Designs Patterns en Java 9782744040979
-
8/3/2019 Les Designs Patterns en Java 9782744040979
1/450
Rfrence
Rseauxet tlcom
Programmation
Gnie logiciel
Scurit
Systmedexploitation
design pattern
Java
Les
enLes 23 modlesde conceptionfondamentaux
Steven John Metsker
William C. Wake
-
8/3/2019 Les Designs Patterns en Java 9782744040979
2/450
Les DesignPatterns en JavaLes 23 modles de conception fondamentaux
Steven John Metsker
et William C. Wake
-
8/3/2019 Les Designs Patterns en Java 9782744040979
3/450
Pearson Education France a apport le plus grand soin la ralisation de ce livre afin de vous four-
nir une information complte et fiable. Cependant, Pearson Education France nassume de respon-
sabilits, ni pour son utilisation, ni pour les contrefaons de brevets ou atteintes aux droits de tierces
personnes qui pourraient rsulter de cette utilisation.
Les exemples ou les programmes prsents dans cet ouvrage sont fournis pour illustrer les descriptions
thoriques. Ils ne sont en aucun cas destins une utilisation commerciale ou professionnelle.
Pearson Education France ne pourra en aucun cas tre tenu pour responsable des prjudices
ou dommages de quelque nature que ce soit pouvant rsulter de lutilisation de ces exemples ou
programmes.
Tous les noms de produits ou marques cits dans ce livre sont des marques dposes par leurs
propritaires respectifs.
Aucune reprsentation ou reproduction, mme partielle, autre que celles prvues larticle L. 122-5 2 et 3 a) du code de laproprit intellectuelle ne peut tre faite sans lautorisation expresse de Pearson Education France ou, le cas chant, sansle respect des modalits prvues larticle L. 122-10 dudit code.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic ormechanical, including photocopying, recording or by any information storage retrieval system, without permission fromPearson Education, Inc.
Publi par Pearson Education France
47 bis, rue des Vinaigriers
75010 PARISTl. : 01 72 74 90 00
www.pearson.fr
Mise en pages : TyPAO
Copyright 2009 Pearson Education France
Tous droits rservs
Titre original : Design Patterns in Java
Traduit de lamricain par Freenet Sofor ltd
ISBN original : 0-321-33302-0
Copyright 2006 by Addison-Wesley
Tous droits rservs
ISBN : 978-2-7440-4097-9
-
8/3/2019 Les Designs Patterns en Java 9782744040979
4/450
Table des matires
Prface .............................................................................................................................. 1
Conventions de codage ................................................................................................. 1
Remerciements ............................................................................................................. 2
Chapitre 1. Introduction ................................................................................................. 3
Quest-ce quun pattern ? .............................................................................................. 3
Quest-ce quun pattern de conception ? ...................................................................... 4
Liste des patterns dcrits dans louvrage ................................................................ 5
Java ............................................................................................................................... 7
UML ............................................................................................................................. 7
Exercices ....................................................................................................................... 8
Organisation du livre ..................................................................................................... 9
Oozinoz ......................................................................................................................... 10
Rsum ......................................................................................................................... 11
Partie I
Patterns dinterface
Chapitre 2. Introduction aux interfaces ........................................................................ 15
Interfaces et classes abstraites ....................................................................................... 16
Interfaces et obligations ................................................................................................ 17
Rsum ......................................................................................................................... 19
Au-del des interfaces ordinaires .................................................................................. 19
Chapitre 3. ADAPTER .................................................................................................... 21
Adaptation une interface ............................................................................................ 21
Adaptateurs de classe et dobjet ................................................................................... 25
-
8/3/2019 Les Designs Patterns en Java 9782744040979
5/450
IV Table des matires
Adaptation de donnes pour un widget JTable .......................................................... 29
Identification dadaptateurs .......................................................................................... 33
Rsum ......................................................................................................................... 34
Chapitre 4. FACADE ....................................................................................................... 35
Faades, utilitaires et dmos ......................................................................................... 36
Refactorisation pour appliquer FACADE ....................................................................... 37
Rsum ......................................................................................................................... 46
Chapitre 5. COMPOSITE .............................................................................................. 47
Un composite ordinaire ................................................................................................. 47
Comportement rcursif dans les objets composites ...................................................... 48
Objets composites, arbres et cycles .............................................................................. 50
Des composites avec des cycles .................................................................................... 55
Consquences des cycles .............................................................................................. 59
Rsum ......................................................................................................................... 60
Chapitre 6. BRIDGE ....................................................................................................... 61
Une abstraction ordinaire .............................................................................................. 61
De labstraction au pattern BRIDGE ............................................................................. 64
Des drivers en tant que BRIDGE ................................................................................... 66
Drivers de base de donnes ........................................................................................... 67Rsum ......................................................................................................................... 69
Partie II
Patterns de responsabilit
Chapitre 7. Introduction la responsabilit ................................................................. 73
Responsabilit ordinaire ............................................................................................... 73
Contrle de la responsabilit grce la visibilit ......................................................... 75
Rsum ......................................................................................................................... 77
Au-del de la responsabilit ordinaire .......................................................................... 77
-
8/3/2019 Les Designs Patterns en Java 9782744040979
6/450
Table des matires V
Chapitre 8. SINGLETON ............................................................................................... 79
Le mcanisme de SINGLETON ..................................................................................... 79
Singletons et threads ..................................................................................................... 81
Identification de singletons ........................................................................................... 82
Rsum ......................................................................................................................... 84
Chapitre 9. OBSERVER ................................................................................................. 85
Un exemple classique : OBSERVER dans les interfaces utilisateurs ............................... 85
Modle-Vue-Contrleur ................................................................................................ 90
Maintenance dun objet Observable ......................................................................... 96
Rsum ......................................................................................................................... 99
Chapitre 10. MEDIATOR ............................................................................................... 101
Un exemple classique : mdiateur de GUI ................................................................... 101Mdiateur dintgrit relationnelle ............................................................................... 106
Rsum ......................................................................................................................... 112
Chapitre 11. PROXY ....................................................................................................... 115
Un exemple classique : proxy dimage ......................................................................... 115
Reconsidration des proxies dimage ........................................................................... 120
Proxy distant ................................................................................................................. 122
Proxy dynamique .......................................................................................................... 128
Rsum ......................................................................................................................... 133
Chapitre 12. CHAIN OF RESPONSABILITY ............................................................. 135
Une chane de responsabilits ordinaire ....................................................................... 135
Refactorisation pour appliquer CHAIN OF RESPONSABILITY ................................... 137
Ancrage dune chane de responsabilits ...................................................................... 140
CHAIN OF RESPONSABILITY sans COMPOSITE ......................................................... 142
Rsum ......................................................................................................................... 142
Chapitre 13. FLYWEIGHT ............................................................................................ 143
Immuabilit ................................................................................................................... 143Extraction de la partie immuable dun flyweight ......................................................... 144
Partage des objets flyweight ......................................................................................... 146
Rsum ......................................................................................................................... 149
-
8/3/2019 Les Designs Patterns en Java 9782744040979
7/450
VI Table des matires
Partie III
Patterns de construction
Chapitre 14. Introduction la construction .................................................................. 153
Quelques dfis de construction ..................................................................................... 153
Rsum ......................................................................................................................... 155
Au-del de la construction ordinaire ............................................................................. 155
Chapitre 15. BUILDER ................................................................................................... 157
Un objet constructeur ordinaire .................................................................................... 157
Construction avec des contraintes ................................................................................. 160
Un builder tolrant ........................................................................................................ 163
Rsum ......................................................................................................................... 164
Chapitre 16. FACTORY METHOD ............................................................................... 165
Un exemple classique : des itrateurs ........................................................................... 165
Identification de FACTORY METHOD ............................................................................. 166
Garder le contrle sur le choix de la classe instancier ............................................... 167
Application de FACTORY METHOD dans une hirarchie parallle ................................. 169
Rsum ......................................................................................................................... 171
Chapitre 17. ABSTRACT FACTORY ........................................................................... 173
Un exemple classique : le kit de GUI ........................................................................... 173
Classe FACTORY abstraite et pattern FACTORY METHOD .............................................. 178
Packages et classes factory abstraites ........................................................................... 182
Rsum ......................................................................................................................... 182
Chapitre 18. PROTOTYPE ............................................................................................ 183
Des prototypes en tant quobjets factory ...................................................................... 183
Prototypage avec des clones ......................................................................................... 185
Rsum ......................................................................................................................... 187
Chapitre 19. MEMENTO ............................................................................................... 189
Un exemple classique : dfaire une opration .............................................................. 189
Dure de vie des mmentos .......................................................................................... 196
-
8/3/2019 Les Designs Patterns en Java 9782744040979
8/450
Table des matires VII
Persistance des mmentos entre les sessions ................................................................ 197
Rsum ......................................................................................................................... 200
Partie IV
Patterns dopration
Chapitre 20. Introduction aux oprations ..................................................................... 203
Oprations et mthodes ................................................................................................. 203
Signatures ..................................................................................................................... 205
Exceptions ..................................................................................................................... 205
Algorithmes et polymorphisme .................................................................................... 206
Rsum ......................................................................................................................... 208Au-del des oprations ordinaires ................................................................................ 209
Chapitre 21. TEMPLATE METHOD ........................................................................... 211
Un exemple classique : algorithme de tri ...................................................................... 211
Compltion dun algorithme ......................................................................................... 215
Hooks ............................................................................................................................ 218
Refactorisation pour appliquer TEMPLATE METHOD .................................................... 219
Rsum ......................................................................................................................... 221
Chapitre 22. STATE ........................................................................................................ 223
Modlisation dtats ...................................................................................................... 223
Refactorisation pour appliquer STATE ......................................................................... 227
Etats constants .............................................................................................................. 231
Rsum ......................................................................................................................... 233
Chapitre 23. STRATEGY ............................................................................................... 235
Modlisation de stratgies ............................................................................................ 236
Refactorisation pour appliquer STRATEGY ................................................................... 238
Comparaison de STRATEGY et STATE .......................................................................... 242
Comparaison de STRATEGY et TEMPLATE METHOD ..................................................... 243
Rsum ......................................................................................................................... 243
-
8/3/2019 Les Designs Patterns en Java 9782744040979
9/450
VIII Table des matires
Chapitre 24. COMMAND ............................................................................................... 245
Un exemple classique : commandes de menus ............................................................. 245
Emploi de COMMAND pour fournir un service ................................................................ 248
Hooks ............................................................................................................................ 249
COMMAND en relation avec dautres patterns .................................................................. 251
Rsum ......................................................................................................................... 252
Chapitre 25. INTERPRETER ........................................................................................ 253
Un exemple de INTERPRETER ..................................................................................... 254
Interprteurs, langages et analyseurs syntaxiques ........................................................ 265
Rsum ......................................................................................................................... 266
Partie V
Patterns dextension
Chapitre 26. Introduction aux extensions ..................................................................... 269
Principes de la conception oriente objet ..................................................................... 269
Le principe de substitution de Liskov ........................................................................... 270
La loi de Demeter ......................................................................................................... 271
Elimination des erreurs potentielles .............................................................................. 273
Au-del des extensions ordinaires ................................................................................ 273
Rsum ......................................................................................................................... 274
Chapitre 27. DECORATOR ........................................................................................... 277
Un exemple classique : flux dE/S et objetsWriter ................................................... 277
Enveloppeurs de fonctions ............................................................................................ 285
DECORATOR en relation avec dautres patterns .............................................................. 292
Rsum ......................................................................................................................... 293
Chapitre 28. ITERATOR ................................................................................................ 295
Itration ordinaire ......................................................................................................... 295
Itration avec scurit inter-threads .............................................................................. 297
Itration sur un objet composite ................................................................................... 303Ajout dun niveau de profondeur un numrateur ............................................... 310
Enumration des feuilles ......................................................................................... 311
Rsum ......................................................................................................................... 313
-
8/3/2019 Les Designs Patterns en Java 9782744040979
10/450
Table des matires IX
Chapitre 29. VISITOR .................................................................................................... 315
Application de VISITOR .............................................................................................. 315
Un VISITOR ordinaire .................................................................................................. 318
Cycles et VISITOR ....................................................................................................... 323
Risques de VISITOR .................................................................................................... 328
Rsum ......................................................................................................................... 330
Partie VI
Annexes
Annexe A. Recommandations ........................................................................................ 333
Tirer le meilleur parti du livre ....................................................................................... 333Connatre ses classiques ............................................................................................... 334
Appliquer les patterns ................................................................................................... 334
Continuer dapprendre .................................................................................................. 336
Annexe B. Solutions ......................................................................................................... 337
Introduction aux interfaces ........................................................................................... 337
Solution 2.1 ............................................................................................................. 337
Solution 2.2 ............................................................................................................. 338
Solution 2.3 ............................................................................................................. 338ADAPTER .................................................................................................................... 338
Solution 3.1 ............................................................................................................. 338
Solution 3.2 ............................................................................................................. 339
Solution 3.3 ............................................................................................................. 340
Solution 3.4 ............................................................................................................. 341
Solution 3.5 ............................................................................................................. 341
Solution 3.6 ............................................................................................................. 342
FACADE ....................................................................................................................... 342
Solution 4.1 ............................................................................................................. 342Solution 4.2 ............................................................................................................. 343
Solution 4.3 ............................................................................................................. 343
Solution 4.4 ............................................................................................................. 344
-
8/3/2019 Les Designs Patterns en Java 9782744040979
11/450
X Table des matires
COMPOSITE ................................................................................................................ 345
Solution 5.1 ............................................................................................................. 345
Solution 5.2 ............................................................................................................. 346
Solution 5.3 ............................................................................................................. 346
Solution 5.4 ............................................................................................................. 347
Solution 5.5 ............................................................................................................. 347
Solution 5.6 ............................................................................................................. 348
BRIDGE ....................................................................................................................... 348
Solution 6.1 ............................................................................................................. 348
Solution 6.2 ............................................................................................................. 348
Solution 6.3 ............................................................................................................. 349
Solution 6.4 ............................................................................................................. 349
Solution 6.5 ............................................................................................................. 350
Introduction la responsabilit ..................................................................................... 350
Solution 7.1 ............................................................................................................. 350
Solution 7.2 ............................................................................................................. 351
Solution 7.3 ............................................................................................................. 352
Solution 7.4 ............................................................................................................. 353
SINGLETON ................................................................................................................ 353
Solution 8.1 ............................................................................................................. 353
Solution 8.2 ............................................................................................................. 353
Solution 8.3 ............................................................................................................. 353
Solution 8.4 ............................................................................................................ 354
OBSERVER .................................................................................................................. 354Solution 9.1 ............................................................................................................. 354
Solution 9.2 ............................................................................................................. 355
Solution 9.3 ............................................................................................................. 356
Solution 9.4 ............................................................................................................. 356
Solution 9.5 ............................................................................................................. 357
Solution 9.6 ............................................................................................................. 357
Solution 9.7 ............................................................................................................. 358
MEDIATOR .................................................................................................................. 359
Solution 10.1 ........................................................................................................... 359
Solution 10.2 ........................................................................................................... 360Solution 10.3 ........................................................................................................... 361
Solution 10.4 ........................................................................................................... 361
Solution 10.5 ........................................................................................................... 362
-
8/3/2019 Les Designs Patterns en Java 9782744040979
12/450
Table des matires XI
PROXY ......................................................................................................................... 362
Solution 11.1 ........................................................................................................... 362
Solution 11.2 ........................................................................................................... 363
Solution 11.3 ........................................................................................................... 363
Solution 11.4 ........................................................................................................... 363
Solution 11.5 ........................................................................................................... 364
CHAIN OF RESPONSABILITY ................................................................................. 364
Solution 12.1 ........................................................................................................... 364
Solution 12.2 ........................................................................................................... 365
Solution 12.3 ........................................................................................................... 366
Solution 12.4 ........................................................................................................... 366
Solution 12.5 ........................................................................................................... 367
FLYWEIGHT ............................................................................................................... 368
Solution 13.1 ........................................................................................................... 368
Solution 13.2 ........................................................................................................... 369
Solution 13.3 ........................................................................................................... 370
Solution 13.4 ........................................................................................................... 370
Introduction la construction ....................................................................................... 371
Solution 14.1 ........................................................................................................... 371
Solution 14.2 ........................................................................................................... 372
Solution 14.3 ........................................................................................................... 372
BUILDER ..................................................................................................................... 373
Solution 15.1 ........................................................................................................... 373
Solution 15.2 ........................................................................................................... 373Solution 15.3 ........................................................................................................... 374
Solution 15.4 ........................................................................................................... 374
FACTORY METHOD .................................................................................................. 375
Solution 16.1 ........................................................................................................... 375
Solution 16.2 ........................................................................................................... 376
Solution 16.3 ........................................................................................................... 376
Solution 16.4 ........................................................................................................... 376
Solution 16.5 ........................................................................................................... 377
Solution 16.6 ........................................................................................................... 378
Solution 16.7 ........................................................................................................... 378ABSTRACT FACTORY ............................................................................................... 379
Solution 17.1 ........................................................................................................... 379
Solution 17.2 ........................................................................................................... 380
-
8/3/2019 Les Designs Patterns en Java 9782744040979
13/450
XII Table des matires
Solution 17.3 ........................................................................................................... 380
Solution 17.4 ........................................................................................................... 381
Solution 17.5 ........................................................................................................... 381
PROTOTYPE ................................................................................................................ 382
Solution 18.1 ........................................................................................................... 382
Solution 18.2 ........................................................................................................... 383
Solution 18.3 ........................................................................................................... 383
Solution 18.4 ........................................................................................................... 384
MEMENTO .................................................................................................................. 384
Solution 19.1 ........................................................................................................... 384
Solution 19.2 ........................................................................................................... 385
Solution 19.3 ........................................................................................................... 385
Solution 19.4 ........................................................................................................... 386
Solution 19.5 ........................................................................................................... 386
Introduction aux oprations .......................................................................................... 387
Solution 20.1 ........................................................................................................... 387
Solution 20.2 ........................................................................................................... 387
Solution 20.3 ........................................................................................................... 388
Solution 20.4 ........................................................................................................... 388
Solution 20.5 ........................................................................................................... 388
TEMPLATE METHOD ................................................................................................ 389
Solution 21.1 ........................................................................................................... 389
Solution 21.2 ........................................................................................................... 389Solution 21.3 ........................................................................................................... 390
Solution 21.4 ........................................................................................................... 390
STATE ........................................................................................................................... 390
Solution 22.1 ........................................................................................................... 390
Solution 22.2 ........................................................................................................... 390
Solution 22.3 ........................................................................................................... 391
Solution 22.4 ........................................................................................................... 391
STRATEGY .................................................................................................................. 392
Solution 23.1 ........................................................................................................... 392Solution 23.2 ........................................................................................................... 392
Solution 23.3 ........................................................................................................... 392
Solution 23.4 ........................................................................................................... 393
-
8/3/2019 Les Designs Patterns en Java 9782744040979
14/450
Table des matires XIII
COMMAND ................................................................................................................. 393
Solution 24.1 ........................................................................................................... 393
Solution 24.2 ........................................................................................................... 393
Solution 24.3 ........................................................................................................... 395
Solution 24.4 ........................................................................................................... 395
Solution 24.5 ........................................................................................................... 396
Solution 24.6 ........................................................................................................... 396
INTERPRETER ............................................................................................................ 396
Solution 25.1 396
Solution 25.2 ........................................................................................................... 397
Solution 25.3 ........................................................................................................... 397
Solution 25.4 ........................................................................................................... 397
Introduction aux extensions .......................................................................................... 398
Solution 26.1 398
Solution 26.2 ........................................................................................................... 398
Solution 26.3 ........................................................................................................... 398
Solution 26.4 ........................................................................................................... 399
DECORATOR .............................................................................................................. 399
Solution 27.1 399
Solution 27.2 ........................................................................................................... 400
Solution 27.3 ........................................................................................................... 401
Solution 27.4 ........................................................................................................... 401
ITERATOR ................................................................................................................... 401
Solution 28.1 401Solution 28.2 ........................................................................................................... 402
Solution 28.3 ........................................................................................................... 402
Solution 28.4 ........................................................................................................... 402
VISITOR ....................................................................................................................... 403
Solution 29.1 403
Solution 29.2 ........................................................................................................... 403
Solution 29.3 ........................................................................................................... 403
Solution 29.4 ........................................................................................................... 404
Solution 29.5 ........................................................................................................... 404
Annexe C. Code source dOozinoz ............................................................................... 405
Obtention et utilisation du code source ........................................................................ 405
Construction du code dOozinoz .................................................................................. 406
-
8/3/2019 Les Designs Patterns en Java 9782744040979
15/450
XIV Table des matires
Test du code avec JUnit ................................................................................................ 406
Localiser les fichiers ..................................................................................................... 406
Rsum ......................................................................................................................... 407
Annexe D. Introduction UML ..................................................................................... 409Classes .......................................................................................................................... 409
Relations entre classes .................................................................................................. 412
Interfaces ....................................................................................................................... 414
Objets ............................................................................................................................ 414
Etats .............................................................................................................................. 416
Glossaire ............................................................................................................................ 417
Bibliographie ..................................................................................................................... 425
Index .................................................................................................................................. 427
-
8/3/2019 Les Designs Patterns en Java 9782744040979
16/450
Prface
Les patterns de conception sont des solutions de niveaux classe et mthode desproblmes courants dans le dveloppement orient objet. Si vous tes dj unprogrammeur Java intermdiaire et souhaitez devenir avanc, ou bien si vous tesavanc mais navez pas encore tudi les patterns de conception, ce livre est pourvous.
Il adopte une approche de cahier dexercices, chaque chapitre tant consacr unpattern particulier. En plus dexpliquer le pattern en question, chaque chapitre
inclut un certain nombre dexercices vous demandant dexpliquer quelque chose oude dvelopper du code pour rsoudre un problme.
Nous vous recommandons vivement de prendre le temps deffectuer chaque exer-cice lorsque vous tombez dessus plutt que de lire le livre dune traite. En mettanten pratique vos connaissances au fur et mesure de leur acquisition, vous apprendrezmieux, mme si vous ne faites pas plus dun ou deux chapitres par semaine.
Conventions de codage
Le code des exemples prsents dans ce livre est disponible en ligne. VoyezlAnnexe C pour savoir comment lobtenir.
Nous avons utilis le plus souvent un style cohrent avec les conventions de codagede Sun. Les accolades ont t omises lorsque ctait possible. Nous avons d fairequelques compromis pour nous adapter au format du livre. Pour respecter les colonnestroites, les noms de variables sont parfois plus courts que ceux que nousemployons habituellement. Et pour viter les complications du contrle de codesource, nous avons distingu les multiples versions dun mme fichier en accolantun chiffre son nom (par exemple, ShowBallistics2). Vous devriez normalementutiliser le contrle de code source et travailler seulement avec la dernire version
dune classe.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
17/450
2 Prface
Remerciements
Nous tenons remercier le dfunt John Vlissides pour ses encouragements et sesrecommandations concernant ce livre et dautres. John, diteur de la collection
Software Patterns Series et coauteur de louvrage original Design Patterns, taitpour nous un ami et une inspiration.
En plus de nous appuyer largement sur Design Patterns, nous nous sommes aussiinspirs de nombreux autres livres. Voyez pour cela la bibliographie en findouvrage. En particulier, The Unified Modeling Language User Guide (le Guide delutilisateur UML) [Booch, Rambaugh, et Jacobsen 1999] donne une explicationclaire dUML, et JavaTM in a Nutshell (Java en concentr : Manuel de rfrence
pour Java) [Flanagan 2005] constitue une aide concise et prcise sur Java. TheChemistry of Fireworks [Russell 2000] nous a servi de source dinformations pour
laborer nos exemples pyrotechniques ralistes.Enfin, nous sommes reconnaissants toute lquipe de production pour son travailacharn et son dvouement.
Steve Metsker ([email protected])
Bill Wake ([email protected])
-
8/3/2019 Les Designs Patterns en Java 9782744040979
18/450
1
Introduction
Ce livre couvre le mme ensemble de techniques que louvrage de rfrenceDesign
Patterns, dErich Gamma, Richard Helm, Ralph Johnson et John Vlissides [Gammaet al. 1995], et propose des exemples en Java. Il inclut de nombreux exercicesconus pour vous aider dvelopper votre aptitude appliquer les patterns deconception dans vos programmes.
Il sadresse aux dveloppeurs qui connaissent Java et souhaitent amliorer
leurs comptences en tant que concepteurs.
Quest-ce quun pattern ?
Un pattern, ou modle, est un moyen daccomplir quelque chose, un moyen
datteindre un objectif, une technique. Le principe est de compiler les mthodes
prouves qui sappliquent de nombreux types defforts, tels que la fabrication
daliments, dartifices, de logiciels, ou autres. Dans nimporte quel art ou mtier
nouveau en voie de maturation, ses pratiquants commencent, un moment donn,
laborer des mthodes communes efficaces pour parvenir leurs buts et rsoudre
des problmes dans diffrents contextes. Cette communaut invente aussi gnra-
lement un jargon pour pouvoir discuter de son savoir-faire. Une partie de cette
terminologie a trait aux modles, ou techniques tablies, permettant dobtenir
certains rsultats. A mesure que cet art se dveloppe et que son jargon stoffe, lesauteurs commencent jouer un rle important. En documentant les modles de cet
art, ils contribuent standardiser son jargon et faire connatre ses techniques.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
19/450
4 Les Design Patterns en Java Les 23 modles de conception fondamentaux
Christopher Alexander a t un des premiers auteurs compiler les meilleures prati-
ques dun mtier en documentant ses modles. Son travail concerne larchitecture,
celle des immeubles et non des logiciels. DansA Pattern Language: Towns, Buildings
Construction (Alexander, Ishikouwa, et Silverstein 1977), il dcrit des modles
permettant de btir avec succs des immeubles et des villes. Cet ouvrage est puis-
sant et a influenc la communaut logicielle notamment en raison du sens quil
donne au terme objectif(intent).
Vous pourriez penser que les modles architecturaux servent principalement
concevoir des immeubles. En fait, Alexander tablit clairement que leur objectif est
de servir et dinspirer les gens qui occuperont les immeubles et les villes conus
daprs ces modles. Son travail a montr que les modles sont un excellent moyen
de saisir et de transmettre le savoir-faire et la sagesse dun art. Il prcise galement
que comprendre et documenter correctement cet objectif est essentiel, philosophiqueet difficile.
La communaut informatique a fait sienne cette approche en crant de nombreux
ouvrages qui documentent des modles de dveloppement logiciel. Ces livres
consignent les meilleures pratiques en matire de processus logiciels, danalyse
logicielle, darchitecture de haut niveau, et de conception de niveau classe. Il en
apparat de nouveaux chaque anne. Lisez les critiques et les commentaires de
lecteurs pour faire un choix judicieux.
Quest-ce quun pattern de conception ?
Un pattern de conception (design pattern) est un modle qui utilise des classes et
leurs mthodes dans un langage orient objet. Les dveloppeurs commencent
souvent sintresser la conception seulement lorsquils matrisent un langage de
programmation et crivent du code depuis longtemps. Il vous est probablement dj
arriv de remarquer que du code crit par quelquun dautre semblait plus simple et
plus efficace que le vtre, auquel cas vous avez d vous demander comment son
dveloppeur tait parvenu une telle simplicit. Les patterns de conception inter-
viennent un niveau au-dessus du code et indiquent typiquement comment atteindre
un but en nutilisant que quelques classes. Un pattern reprsente une ide, et nonune implmentation particulire.
Dautres dveloppeurs ont dcouvert avant vous comment programmer efficace-
ment dans les langages orients objet. Si vous souhaitez devenir un programmeur
-
8/3/2019 Les Designs Patterns en Java 9782744040979
20/450
Chapitre 1 Introduction 5
Java avanc, vous devriez tudier les patterns de conception, surtout ceux de celivre les mmes que ceux expliqus dansDesign Patterns .
Louvrage Design Patterns dcrit vingt-trois patterns de conception (pour plus de
dtails, voir section suivante). De nombreux autres livres ont suivi sur le sujet, aussidnombre-t-on au moins cent patterns qui valent la peine dtre connus. Les vingt-
trois patterns recenss par Gamma, Helm, Johnson et Vlissides ne sont pas forc-
ment les plus importants, mais ils sont nanmoins proches du haut de la liste. Ces
auteurs ont donc bien choisi et les patterns quils documentent valent certainement
la peine que vous les appreniez. Ils vous serviront de rfrence lorsque commencerez
tudier les patterns exposs par dautres sources.
Liste des patterns dcrits dans louvrage
Patterns dinterface
ADAPTER (17) fournit linterface quun client attend en utilisant les services dune
classe dont linterface est diffrente.
FACADE (33) fournit une interface simplifiant lemploi dun sous-systme.
COMPOSITE (47) permet aux clients de traiter de faon uniforme des objets indivi-
duels et des compositions dobjets.
BRIDGE (63) dcouple une classe qui sappuie sur des oprations abstraites de
limplmentation de ces oprations, permettant ainsi la classe et son implmen-tation de varier indpendamment.
Patterns de responsabilit
SINGLETON (81) garantit quune classe ne possde quune seule instance, et fournit
un point daccs global celle-ci.
OBSERVER (87) dfinit une dpendance du type un--plusieurs (1,n) entre des objets
de manire ce que lorsquun objet change dtat, tous les objets dpendants en
soient notifis et soient actualiss afin de pouvoir ragir conformment.
MEDIATOR (103) dfinit un objet qui encapsule la faon dont un ensemble dobjets
interagissent. Cela promeut un couplage lche, vitant aux objets davoir se
rfrer explicitement les uns aux autres, et permet de varier leur interaction ind-
pendamment.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
21/450
6 Les Design Patterns en Java Les 23 modles de conception fondamentaux
PROXY (117) contrle laccs un objet en fournissant un intermdiaire pour cetobjet.
CHAIN OF RESPONSABILITY (137) vite de coupler lmetteur dune requte son
rcepteur en permettant plus dun objet dy rpondre.
FLYWEIGHT (145) utilise le partage pour supporter efficacement un grand nombredobjets forte granularit.
Patterns de construction
BUILDER (159) dplace la logique de construction dun objet en-dehors de la classe instancier, typiquement pour permettre une construction partielle ou pour simplifierlobjet.
FACTORY METHOD (167) laisse un autre dveloppeur dfinir linterface permettant decrer un objet, tout en gardant un contrle sur le choix de la classe instancier.
ABSTRACT FACTORY (175) permet la cration de familles dobjets ayant un lien ouinterdpendants.
PROTOTYPE (187) fournit de nouveaux objets par la copie dun exemple.
MEMENTO (193) permet le stockage et la restauration de ltat dun objet.
Patterns dopration
TEMPLATE METHOD (217) implmente un algorithme dans une mthode, laissant dautres classes le soin de dfinir certaines tapes de lalgorithme.
STATE (229) distribue la logique dpendant de ltat dun objet travers plusieursclasses qui reprsentent chacune un tat diffrent.
STRATEGY (241) encapsule des approches, ou stratgies, alternatives dans des classesdistinctes qui implmentent chacune une opration commune.
COMMAND (251) encapsule une requte en tant quobjet, de manire pouvoir para-mtrer des clients au moyen de divers types de requtes (de file dattente, de temps
ou de journalisation) et de permettre un client de prparer un contexte spcial danslequel mettre la requte.
INTERPRETER (261) permet de composer des objets excutables daprs un ensemblede rgles de composition que vous dfinissez.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
22/450
Chapitre 1 Introduction 7
Patterns dextension
DECORATOR (287) permet de composer dynamiquement le comportement dunobjet.
ITERATOR (305) fournit un moyen daccder de faon squentielle aux lmentsdune collection.
VISITOR (325) permet de dfinir une nouvelle opration pour une hirarchie sanschanger ses classes.
Java
Les exemples de ce livre utilisent Java, le langage orient objet (OO) dvelopp parSun. Ce langage, ses bibliothques et ses outils associs forment une suite de
produits pour le dveloppement et la gestion de systmes aux architectures multi-niveaux et orientes objet.
Limportance de Java tient en partie au fait quil sagit dun langage de consoli-dation, cest--dire conu pour intgrer les points forts des langages prcdents.Cette consolidation est la cause de son succs et garantit que les langages futurstendront sinscrire dans sa continuit au lieu de sen loigner radicalement. Votreinvestissement dans Java ne perdra assurment pas de sa valeur, quel que soit lelangage qui lui succde.
Les patterns deDesign Patterns sappliquent Java, car, comme Smalltalk, C++ etC#, ils se fondent sur un paradigme classe/instance. Java ressemble beaucoup plus Smalltalk et C++ qu Prolog ou Self par exemple. Mme sil ne faut pas ngli-ger limportance de paradigmes concurrents, le paradigme classe/instance constitueune avance concrte en informatique applique. Le prsent livre emploie Java enraison de sa popularit et parce que son volution suit le chemin des langages quenous utiliserons dans les annes venir.
UML
Lorsque les solutions des exercices contiennent du code, ce livre utilise Java. Maisnombre dexercices vous demandent de dessiner un diagramme illustrant les rela-tions entre des classes, des packages et dautres lments. Vous pouvez choisir lanotation que vous prfrez, mais sachez que ce livre utilise la notation UML(Unified Modeling Language). Mme si vous la connaissez dj, il peut tre utile
-
8/3/2019 Les Designs Patterns en Java 9782744040979
23/450
8 Les Design Patterns en Java Les 23 modles de conception fondamentaux
davoir une rfrence porte de main. Vous pouvez consulter deux ouvrages dequalit : The Unified Modeling Language User Guide (le Guide de lutilisateur UML)[Booch, Rumbaugh, et Jacobsen 1999] et UML Distilled [Fowler et Scott 2003].Les connaissances minimales dont vous avez besoin pour ce livre sont donnes danslAnnexe D consacre UML.
Exercices
Mme si vous lisez de nombreux ouvrages sur un sujet, vous naurez le sentimentde le matriser vraiment quen le pratiquant. Tant que vous nappliquerez pas
concrtement les connaissances acquises, certaines subtilits et approches alterna-
tives vous chapperont. Le seul moyen de gagner de lassurance avec les patterns deconception est de les appliquer dans le cadre dexercices pratiques.
Le problme lorsque lon apprend en faisant est que lon peut causer des dgts.Vous ne pouvez pas appliquer les patterns de conception dans du code en produc-
tion si vous ne les matrisez pas. Mais il faut bien que vous commenciez les appliquerpour acqurir ce savoir-faire. La solution est de vous familiariser avec les patterns
au travers dexemples de problmes, o vos erreurs seront sans consquence mais
instructives.
Chaque chapitre de ce livre dbute par une courte introduction puis prsente
progressivement une srie dexercices. Lorsque vous avez trouv une solution, vouspouvez la comparer aux rponses proposes dans lAnnexe B. Il se peut que la solu-
tion du livre adopte une approche diffrente de la vtre, vous faisant voir les chosessous une autre perspective.
Vous ne pouvez probablement pas prvoir le temps quil vous faudra pour trouver
les rponses aux exercices. Si vous consultez dautres livres, travaillez avec uncollgue et crivez des chantillons de code pour vrifier votre solution, cest
parfait ! Vous ne regretterez pas lnergie et le temps investis.
Un avertissement : si vous vous contentez de lire les solutions immdiatement aprs
avoir lu un exercice, vous ne tirerez pas un grand enseignement de ce livre. Ces
solutions ne vous seront daucune utilit si vous nlaborez pas dabord les vtrespour pouvoir ensuite les leur comparer et tirer les leons de vos erreurs.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
24/450
Chapitre 1 Introduction 9
Organisation du livre
Il existe de nombreuses faons dorganiser et de classer les patterns de conception.
Vous pourriez les organiser en fonction de leurs similitudes sur le plan structurel,
ou bien suivre lordre de Design Patterns. Mais laspect le plus important dunpattern est son objectif, cest--dire la valeur potentielle lie son application. Le
prsent livre organise les vingt-trois patterns deDesign Patterns en fonction de leur
objectif.
Reste ensuite dterminer comment catgoriser ces objectifs. Nous sommes partis
du principe que lobjectif dun pattern de conception peut gnralement tre
exprim comme tant le besoin daller plus loin que les fonctionnalits ordinaires
intgres Java. Par exemple, Java offre un large support pour la dfinition des
interfaces implmentes par les classes. Mais si vous disposez dj dune classe
dont vous aimeriez modifier linterface pour quelle corresponde aux exigences
dun client, vous pourriez dcider dappliquer le patternADAPTER. Lobjectif de ce
pattern est de vous aider complmenter les fonctionnalits dinterface intgres
Java.
Ce livre regroupe les patterns de conception en cinq catgories que voici :
1. Interfaces.
2. Responsabilit.
3. Construction.
4. Oprations.
5. Extensions.
Ces cinq catgories correspondent aux cinq parties du livre. Chaque partie dbute
par un chapitre qui prsente et remet en question les fonctionnalits Java lies au
type dobjectif dont il est question. Par exemple, le premier chapitre de la Partie I
traite des interfaces Java ordinaires. Il vous amne rflchir sur la structure des
interfaces Java, notamment en les comparant aux classes abstraites. Les autreschapitres de cette partie dcrivent les patterns qui ont pour principal objectif de
dfinir une interface, cest--dire lensemble des mthodes quun client peut appe-
ler partir dun fournisseur de services. Chacun deux rpond un besoin que les
interfaces Java ne peuvent satisfaire elles seules.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
25/450
10 Les Design Patterns en Java Les 23 modles de conception fondamentaux
Ce classement des patterns par objectifs ne signifie pas que chaque pattern supporteseulement un type dobjectif. Lorsquil en supporte plusieurs, il fait lobjet dunchapitre entier dans la premire partie laquelle il sapplique puis il est mentionnbrivement dans les autres parties concernes. Le Tableau 1.1 illustre la catgo-risation sous-jacente lorganisation du livre.
Nous esprons que ce classement vous amnera vous interroger. Pensez-vousaussi que SINGLETON a trait la responsabilit, et non la construction ? COMPO-SITE est-il rellement un pattern dinterface ? Toute catgorisation est subjective.Mais vous conviendrez certainement que le fait de rflchir lobjectif des patterns
et la faon de les appliquer est un exercice trs utile.
Oozinoz
Les exercices de ce livre citent tous des exemples dOozinoz Fireworks, une entre-prise fictive qui fabrique et vend des pices pour feux dartifice et organise desvnements pyrotechniques. Vous pouvez vous procurer le code de ces exemples ladresse www.oozinoz.com. Pour en savoir plus sur la compilation et le test ducode, voyez lAnnexe C.
Tableau 1.1 : Une catgorisation des patterns par objectifs
Objectif Patterns
Interfaces ADAPTER, FACADE, COMPOSITE, BRIDGE
Responsabilit SINGLETON, OBSERVER, MEDIATOR, PROXY, CHAIN OF RESPONSIBILITY,
FLYWEIGHT
Construction BUILDER, FACTORYMETHOD,ABSTRACT FACTORY, PROTOTYPE, MEMENTOOprations TEMPLATE METHOD, STATE, STRATEGY, COMMAND, INTERPRETER
Extensions DECORATOR, ITERATOR, VISITOR
-
8/3/2019 Les Designs Patterns en Java 9782744040979
26/450
Chapitre 1 Introduction 11
Rsum
Les patterns de conception distillent une sagesse vieille de quelques dizainesdannes qui tablit un jargon standard, permettant aux dveloppeurs de nommer
les concepts quils appliquent. Ceux abords dans louvrage de rfrence DesignPatterns font partie des patterns de niveau classe les plus utiles et mritent que vousles appreniez. Le prsent livre reprend ces patterns mais utilise Java et ses biblio-thques pour ses exemples et exercices. En ralisant les exercices proposs, vousapprendrez reconnatre et appliquer une part importante de la sagesse de lacommunaut logicielle.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
27/450
-
8/3/2019 Les Designs Patterns en Java 9782744040979
28/450
IPatterns dinterface
-
8/3/2019 Les Designs Patterns en Java 9782744040979
29/450
-
8/3/2019 Les Designs Patterns en Java 9782744040979
30/450
2
Introduction aux interfaces
Pour parler de manire abstraite, linterface dune classe est lensemble des mthodes
et champs de la classe auxquels des objets dautres classes sont autoriss accder.Elle constitue gnralement un engagement que les mthodes accomplirontlopration signifie par leur nom et tel que spcifie par les commentaires, les testset autres documentations du code. Limplmentation dune classe est le codecontenu dans ses mthodes.
Java fait du concept dinterface une structure distincte, sparant expressmentlinterface ce quun objet doit faire de limplmentation comment unobjet remplit cet engagement. Les interfaces Java permettent plusieurs classesdoffrir la mme fonctionnalit et une mme classe dimplmenter plusieurs inter-
faces.Plusieurs patterns de conception emploient les fonctionnalits intgres Java. Parexemple, vous pourriez utiliser une interface pour adapter linterface dune classeafin de rpondre aux besoins dun client en appliquant le patternADAPTER. Maisavant daborder certaines notions avances, il peut tre utile de sassurer que vousmatrisez les fonctionnalits de base, commencer par les interfaces.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
31/450
16 Partie I Patterns dinterface
Interfaces et classes abstraites
Le livre original Design Patterns [Gamma et al. 1995] mentionne frquemment
lemploi de classes abstraites mais pas du tout lemploi dinterfaces. La raison en
est que les langages C++ et Smalltalk, sur lesquels il sappuie pour ses exemples, nepossdent pas une telle structure. Cela ne remet toutefois pas en cause lutilit de ce
livre pour les dveloppeurs Java, tant donn que les interfaces Java sont assez
semblables aux classes abstraites.
Si les interfaces nexistaient pas, vous pourriez utiliser la place des classes abstraites,
comme dans C++. Les interfaces jouent toutefois un rle essentiel dans le dve-
loppement dapplications multiniveaux, ce qui justifie certainement leur statut
particulier de structure distincte.
Considrez la dfinition dune interface que les classes de simulation de fuse
doivent implmenter. Les ingnieurs conoivent toutes sortes de fuses, quelles
soient combustible solide ou liquide, avec des caractristiques balistiques trs
diverses. Indpendamment de sa composition, la simulation dune fuse doit fournirdes chiffres pour la pousse (thrust) et la masse (mass). Voici le code quutilise
Oozinoz pour dfinir linterface de simulation de fuse :
package com.oozinoz.simulation;
public interface RocketSim {
abstract double getMass();
public double getThrust();
void setSimTime(double t);
}
Exercice 2.1
Enumrez trois diffrences entre les classes abstraites et les interfaces Java.
bLes solutions des exercices de ce chapitre sont donnes dans lAnnexe B.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
32/450
Chapitre 2 Introduction aux interfaces 17
Interfaces et obligations
Un avantage important des interfaces Java est quelles limitent linteraction entreles objets. Cette limitation savre tre un soulagement. En effet, une classe quiimplmente une interface peut subir des changements considrables dans sa faonde remplir le contrat dfini par linterface sans que cela affecte aucunement sesclients.
Un dveloppeur qui cre une classe implmentant RocketSim a pour tche dcrireles mthodes getMass() et getThrust() qui retournent les mesures de perfor-mance dune fuse. Autrement dit, il doit remplir le contrat de ces mthodes.
Parfois, les mthodes dsignes par une interface nont aucune obligation de fournirun service lappelant. Dans certains cas, la classe dimplmentation peut mmeignorer lappel, implmentant une mthode avec un corps vide.
Exercice 2.2
Parmi les affirmations suivantes, lesquelles sont vraies ?
A. Les mthodes de linterface RocketSim sont toutes trois abstraites, mmesi seulement getMass() dclare cela explicitement.
B. Les trois mthodes de linterface sont publiques, mme si seulementgetThrust() dclare cela explicitement.
C. Linterface est dclare public interface, mais elle serait publiquemme si le mot cl public tait omis.
D. Il est possible de crer une autre interface, par exemple RocketSimSolid,qui tende RocketSim.
E. Toute interface doit comporter au moins une mthode.
F. Une interface peut dclarer des champs dinstance quune classe dimpl-mentation doit galement dclarer.
G. Bien quil ne soit pas possible dinstancier une interface, une interfacepeut dclarer des mthodes constructeurs dont la signature sera donnepar une classe dimplmentation.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
33/450
18 Partie I Patterns dinterface
Si vous crez une interface qui spcifie un ensemble de mthodes de notification,vous pourriez envisager dutiliser une classe stub, cest--dire une classe qui impl-mente linterface avec des mthodes ne faisant rien. Les dveloppeurs peuvent dri-ver des sous-classes de la classe stub, en redfinissant uniquement les mthodes delinterface qui sont importantes pour leur application. La classeWindowAdapterdans java.awt.event est un exemple dune telle classe, comme illustr Figure 2.1
(pour une introduction rapide UML, voyez lAnnexe D). Cette classe implmentetoutes les mthodes de linterfaceWindowListener mais les implmentations sontvides ; ces mthodes ne contiennent aucune instruction.
Exercice 2.3
Donnez un exemple dinterface avec des mthodes nimpliquant aucune respon-
sabilit pour la classe dimplmentation de retourner une valeur ou daccomplirune quelconque action pour le compte de lappelant.
Figure 2.1
La classe WindowAdapter facilite lenregistrement de listeners pour les vnements de fentre
en vous permettant dignorer ceux qui ne vous intressent pas.
interface
WindowListener
windowActivated()
windowClosed()
windowClosing()windowDeactivated()
windowDeiconified()
windowIconified()
windowOpened()
windowActivated()
windowClosed()
windowClosing()windowDeactivated()
windowDeiconified()
windowIconified()
windowOpened()
WindowAdapter
windowStateChanged()
windowGainedFocus()
windowLostFocus()
windowStateChanged()
windowGainedFocus()
windowLostFocus()
-
8/3/2019 Les Designs Patterns en Java 9782744040979
34/450
-
8/3/2019 Les Designs Patterns en Java 9782744040979
35/450
20 Partie I Patterns dinterface
Lobjectif de chaque pattern de conception est de rsoudre un problme dans uncertain contexte. Les patterns dinterface conviennent dans des contextes o vousavez besoin de dfinir ou de redfinir laccs aux mthodes dune classe ou dun groupede classes. Par exemple, lorsque vous disposez dune classe qui accomplit unservice ncessaire, mais dont les noms de mthodes ne correspondent pas aux attentesdun client, vous pouvez appliquer le patternADAPTER.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
36/450
3
ADAPTER
Un objet est un client lorsquil a besoin dappeler votre code. Dans certains cas,
votre code existe dj et le dveloppeur peut crer le client de manire ce quilutilise les interfaces de vos objets. Dans dautres, le client peut tre dvelopp ind-pendamment de votre code. Par exemple, un programme de simulation de fusepourrait tre conu pour utiliser les informations techniques que vous fournissez,mais une telle simulation aurait sa propre dfinition du comportement que doit avoir unefuse. Si une classe existante est en mesure dassurer les services requis par un clientmais que ses noms de mthodes diffrent, vous pouvez appliquer le patternADAPTER.
Lobjectif du patternADAPTER est de fournir linterface quun client attend en
utilisant les services dune classe dont linterface est diffrente.
Adaptation une interface
Le dveloppeur dun client peut avoir prvu les situations o vous aurez besoindadapter votre code au sien. Cela est vident sil a fourni une interface qui dfinitles services dont le code client a besoin, comme dans lexemple de la Figure 3.1.Une classe cliente invoque une mthode mthodeRequise() dclare dans uneinterface. Supposez que vous avez trouv une classe existante avec une mthodenomme par exemple mthodeUtile() capable de rpondre aux besoins du client.Vous pouvez alors adapter cette classe au client en crivant une classe qui tend
ClasseExistante, implmente InterfaceRequise et redfinit mthode-Requise() de sorte quelle dlgue ses demandes mthodeUtile().
La classe NouvelleClasse est un exemple deADAPTER. Une instance de cetteclasse est une instance de InterfaceRequise. En dautres termes, NouvelleClasserpond aux besoins du client.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
37/450
22 Partie I Patterns dinterface
Pour prendre un exemple plus concret, imaginez que vous travailliez avec unpackage qui simule le vol et le minutage de fuses comme celles fabriques parOozinoz. Ce package inclut un simulateur dvnements qui couvre les effets dulancement de plusieurs fuses, ainsi quune interface qui spcifie le comportement
dune fuse. La Figure 3.2 illustre ce package.Vous disposez dune classe PhysicalRocket que vous voulez inclure dans la simu-lation. Cette classe possde des mthodes qui correspondent approximativement aucomportement requis par le simulateur. Vous pouvez donc appliquerADAPTER endrivant de PhysicalRocket une sous-classe qui implmente linterface Rocket-Sim. La Figure 3.3 illustre partiellement cette conception.
La classe PhysicalRocket contient les informations dont le simulateur a besoin,mais ses mthodes ne correspondent pas exactement celles que le programme desimulation dclare dans linterface RocketSim. Cette diffrence tient au fait que le simu-
lateur possde une horloge interne et actualise occasionnellement les objets simulsen invoquant une mthode setSimTime(). Pour adapter la classe PhysicalRocket auxexigences du simulateur, un objet OozinozRocket pourrait utiliser une variabledinstance time et la passer aux mthodes de la classe PhysicalRocket lorsquencessaire.
Figure 3.1
Lorsque le dve-loppeur du codeclient dfinit prci-
sment les besoinsdu client, vous pouvezremplir le contrat
dfini par linterfaceen adaptant le code
existant. InterfaceRequise
interface
NouvelleClasse
mthodeRequise()
mthodeRequise()
ClasseExistante
mthodeUtile()
Client
-
8/3/2019 Les Designs Patterns en Java 9782744040979
38/450
Chapitre 3 ADAPTER 23
Figure 3.2
Le package Simulationdfinit clairement ses exigences pour simuler le vol dune fuse.
Figure 3.3
Une fois complt, ce diagramme reprsentera la conception dune classe qui adapte
la classe PhysicalRocket pour rpondre aux exigences de linterfaceRocketSim.
EventSim
com.oozinoz.simulation
RocketSim
interface
getMass():double
OozinozRocket
PhysicalRocket
getMass(t:double):double
getThrust(t:double):double
PhysicalRocket(burnArea:double,burnRate:double,fuelMass:double,totalMass:double)
getBurnTime():double
RocketSim
interface
getMass():double
getThrust():doublesetSimTime(t:double)
-
8/3/2019 Les Designs Patterns en Java 9782744040979
39/450
24 Partie I Patterns dinterface
Le code de PhysicalRocket est un peu complexe car il runit toutes les caractris-tiques physiques dont se sert Oozinoz pour modliser une fuse. Mais cest exac-tement la logique que nous voulons rutiliser. La classe adaptateur OozinozRockettraduit simplement les appels pour utiliser les mthodes de sa super-classe. Le codede cette nouvelle sous-classe pourrait ressembler ce qui suit :
package com.oozinoz.firework;import com.oozinoz.simulation.*;
public class OozinozRocketextends PhysicalRocket implements RocketSim {
private double time;
public OozinozRocket(double burnArea, double burnRate,double fuelMass, double totalMass) {
super(burnArea, burnRate, fuelMass, totalMass);}
public double getMass() {// Exercice !
}
public double getThrust() {// Exercice !
}
public void setSimTime(double time) {this.time = time;
}}
Exercice 3.1
Compltez le diagramme de la Figure 3.3 en faisant en sorte que la classe Oozino-zRocket permette un objet PhysicalRocket de prendre part une simulation
en tant quobjet RocketSim. Partez du principe que vous ne pouvez modifier niRocketSim ni PhysicalRocket.
bLes solutions des exercices de ce chapitre sont donnes dans lAnnexe B.
Exercice 3.2
Compltez le code de la classe OozinozRocket en dfinissant les mthodesgetMass() et getThrust().
-
8/3/2019 Les Designs Patterns en Java 9782744040979
40/450
Chapitre 3 ADAPTER 25
Lorsquun client dfinit ses attentes dans une interface, vous pouvez appliquerADAPTER en fournissant une classe qui implmente cette interface et tend une classeexistante. Il se peut aussi que vous puissiez appliquer ce pattern mme en labsencedune telle interface, auquel cas il convient dutiliser un adaptateur dobjet.
Adaptateurs de classe et dobjet
Les conceptions des Figures 3.1 et 3.3 sont des adaptateurs de classe, cest--dire queladaptation procde de la drivation de sous-classes. Dans une telle conception, lanouvelle classe adaptateur implmente linterface dsire et tend une classe exis-tante. Cette approche ne fonctionne pas toujours, notamment lorsque lensemble demthodes que vous voulez adapter nest pas spcifi dans une interface. Dans cecas, vous pouvez crer un adaptateur dobjet, cest--dire un adaptateur qui utilisela dlgation plutt que la drivation de sous-classes. La Figure 3.4 illustre cetteconception (comparez-la aux diagrammes prcdents).
Figure 3.4
Vous pouvez crer un adaptateur dobjet en drivant la sous-classe dont vous avez besoinet en remplissant les contrats des mthodes en vous appuyant sur un objet dune classe existante.
ClasseRequise
NouvelleClasse
mthodeRequise()
mthodeRequise()
Client
ClasseExistante
mthodeUtile()
-
8/3/2019 Les Designs Patterns en Java 9782744040979
41/450
26 Partie I Patterns dinterface
La classe NouvelleClasse est un exemple deADAPTER. Une instance de cetteclasse est une instance de ClasseRequise. En dautres termes, NouvelleClasserpond aux besoins du client. Elle peut adapter la classe ClasseExistante poursatisfaire le client en utilisant une instance de cette classe.
Pour prendre un exemple plus concret, imaginez que le package de simulation fonc-tionne directement avec une classe Skyrocket, sans spcifier dinterface dfi-nissant les comportements ncessaires pour la simulation. La Figure 3.5 illustrecette classe.
La classe Skyrocket utilise un modle physique assez rudimentaire. Par exemple,elle part du principe que la fuse se consume entirement mesure que son carbu-rant brle. Supposez que vous vouliez appliquer le modle plus sophistiqu offertpar la classe PhysicalRocket dOozinoz. Pour adapter la logique de cette classe la simulation, vous pourriez crer une classe OozinozSkyrocket en tant quadapta-teur dobjet qui tend Skyrocket et utilise un objet PhysicalRocket, comme lemontre la Figure 3.6.
Figure 3.5
Dans cette conception-ci, le
package com.oozinoz.simu-lation ne spcifie pas linter-
face dont il a besoin pourmodliser une fuse. EventSim
Skyrocket
getMass():doublegetThrust():double
setSimTime(t:double)
Skyrocket(mass:double,thrust:doubleburnTime:double)
com.oozinoz.simulation
-
8/3/2019 Les Designs Patterns en Java 9782744040979
42/450
Chapitre 3 ADAPTER 27
En tant quadaptateur dobjet, la classe OozinozSkyrocket tend Skyrocket, etnon PhysicalRocket. Cela permet un objet OozinozSkyrocket de servir desubstitut chaque fois que le client requiert un objet Skyrocket. La classe Skyrocketsupporte la drivation de sous-classes en dfinissant sa variable simTime commetant protected.
Figure 3.6
Une fois complt, ce diagramme reprsentera la conception dun adaptateur dobjet
qui sappuie sur les informations dune classe existante pour satisfaire le besoin dun clientdutiliser un objetSkyrocket.
Exercice 3.3Compltez le diagramme de la Figure 3.6 en faisant en sorte que des objetsOozinozSkyrocket puissent servir dobjets Skyrocket.
Skyrocket
OozinozSkyrocket
getMass():double
getThrust():double
setSimTime(t:double)
Skyrocket(mass:double,thrust:doubleburnTime:double)
PhysicalRocket
getMass(t:double):double
getThrust(t:double):double
PhysicalRocket(burnArea:double,burnRate:double,fuelMass:double,totalMass:double)
getBurnTime():double
#simTime:double
...
-
8/3/2019 Les Designs Patterns en Java 9782744040979
43/450
28 Partie I Patterns dinterface
Le code de la classe OozinozSkyrocket pourrait ressembler ce qui suit :
package com.oozinoz.firework;
import com.oozinoz.simulation.*;
public class OozinozSkyrocket extends Skyrocket {
private PhysicalRocket rocket;
public OozinozSkyrocket(PhysicalRocket r) {
super(
r.getMass(0),
r.getThrust(0),
r.getBurnTime());
rocket = r;
}
public double getMass() {return rocket.getMass(simTime);
}
public double getThrust() {
return rocket.getThrust(simTime);
}
}
La classe OozinozSkyrocket vous permet de fournir un objet OozinozSkyrocketchaque fois que le package requiert un objet Skyrocket. En gnral, les adaptateursdobjet rsolvent, partiellement du moins, le problme pos par ladaptation dunobjet une interface qui na pas t expressment dfinie.
Ladaptateur dobjet pour la classe Skyrocket est une conception plus risque queladaptateur de classe qui implmente linterface RocketSim. Mais il ne faut pastrop se plaindre. Au moins, aucune mthode na t dfinie comme tant final, cequi nous aurait empchs de la redfinir.
Exercice 3.4
Citez une raison pour laquelle la conception dadaptateur dobjet utilise parla classe OozinozSkyrocket est plus fragile que lapproche avec adaptateur declasse.
-
8/3/2019 Les Designs Patterns en Java 9782744040979
44/450
Chapitre 3 ADAPTER 29
Adaptation de donnes pour un widget JTable
Laffichage de donnes sous forme de table donne lieu un exemple courant
dadaptateur dobjet. Swing fournit le widget JTable pour afficher des tables. Les
concepteurs de ce widget ne savaient naturellement pas quelles donnes il servirait afficher. Aussi, plutt que de coder en dur certaines structures de donnes, ils ont
prvu une interface appele TableModel (voir Figure 3.7) dont dpend le fonction-
nement de JTable. Il vous revient ensuite de crer un adaptateur pour que vos
donnes soient conformes TableModel.
Nombre des mthodes de TableModel suggrent la possibilit dune implmen-
tation par dfaut. Heureusement, le JDK (Java Development Kit) inclut une classe
abstraite qui fournit des implmentations par dfaut pour toutes les mthodes
de cette interface lexception de celles qui sont trs spcifiques un domaine.
La Figure 3.8 illustre cette classe.
Imaginez que vous souhaitiez lister quelques fuses dans une table en utilisant une
interface utilisateur Swing. Comme le montre la Figure 3.9, vous pourriez crer
une classe RocketTableModel qui adapte un tableau de fuses linterface atten-
due par TableModel.
La classe RocketTableModel doit tendreAbstractTableModel puisque cette
dernire est une classe et non une interface. Lorsque linterface cible de ladapta-
tion est supporte par une classe abstraite que vous souhaitez utiliser, vous devez
Figure 3.7
La classe JTableest un composant
Swing qui affiche
dans une table de GUIles donnes duneimplmentationde TableModel.
JTable
addTableModelListener()
TableModel
getColumnClass()
getColumnCount()
getColumnName()
getRowCount()
getValueAt()
isCellEditable()
removeTableModelListener()
setValueAt()
-
8/3/2019 Les Designs Patterns en Java 9782744040979
45/450
30 Partie I Patterns dinterface
Figure 3.8
La classeAbstract-TableModel prvoitdes implmentations
par dfaut pourpresque toutesles mthodes de
TableModel.
Figure 3.9
La classeRocketTableModeladapte linterface TableModel la classeRocket
du domaine Oozinoz.
AbstractTableModel
getColumnCount()
getRo