Design patterns tête la première
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Design patterns
tête la première
Eric Freeman
Elisabeth Freeman
avec
Kathy Sierra
Bert Bates
Traduction de Marie-Cécile Baland
Votre cerveau et les Design Patterns. Voilà que vous essayez d’apprendre quelque chose tandis
que votre cerveau fait tout ce qu’il peut pour vous empêcher de mémoriser. Votre cerveau pense « Mieux vaut
laisser de la place pour les choses vraiment importantes, comme savoir quels sont les animaux sauvages qu’il
convient d’éviter ou se rendre compte que faire du snowboard en maillot de bain n’est pas une bonne idée ».
Mais comment procéder pour le convaincre que votre vie dépend de votre maîtrise des Design Patterns ?
À qui s’adresse ce livre ? xxiv
Nous savons ce que pense votre cerveau xxv
Métacognition xxvii
Soumettez votre cerveau xxix
Éditeurs techniques xxxii
Remarciements xxxiii
Table des matières (résumé)
Intro xxv
1 Bienvenue aux Design Patterns : introduction 1
2 Tenez vos objets au courant : le pattern Observateur 37
3 Décorer les objets : le pattern Décorateur 79
4 Un peu de cuisine orientée objet : les patterns fabriques 109
5 Des objets uniques en leur genre : le pattern Singleton 169
6 Encapsuler l’invocation : le pattern Commande 191
7 S’avoir s’adapter : les patterns Adaptateur et Façade 235
8 Encapsuler les algorithmes : le pattern Patron de méthode 275
9 Des collections bien gérées : les patterns Itérateur et Composite 315
10 L’état des choses : le pattern État 385
11 Contrôler l’accès aux objets : le pattern Proxy 429
12 Patterns de Patterns : Patterns composés 499
13 Les patterns dans le monde réel : Mieux vivre avec les patterns 577
14 Annexe : Les patterns restants 611Table des matières (le contenu réel)
1 intro aux Design Patterns
Bienvenue aux Design Patterns
Quelqu’un a déjà résolu vos problèmes. Dans ce chapitre, vous allez apprendre comment (et
pourquoi) exploiter l’expérience et les leçons tirées par d’autres développeurs qui ont déjà suivi le même
chemin, rencontré les mêmes problèmes de conception et survécu au voyage. Nous allons voir l’usage et les
avantages des design patterns, revoir quelques principes fondamentaux de la conception OO et étudier un
exemple de fonctionnement d’un pattern. La meilleure façon d’utiliser un pattern est de le charger dans votre
cerveau puis de reconnaître les points de vos conceptions et des applications existantes auxquels vous pouvez
les appliquer. Au lieu de réutiliser du code, les patterns vous permettent de réutiliser de l’expérience.
Le simulateur de canards 2
Joël réfléchit à l’héritage.... 5
Et si nous utilisions une interface ? 6
La seule et unique constante du développement 8
Séparer ce qui change de ce qui reste identique 10
Concevoir le comportement des canards 11
Tester le code 18
Modifier dynamiquement les comportements 20
Vue d’ensemble des comportements encapsulés 22
A-UN peut être préférable à EST-UN 23
Le pattern Stratégie 24
Le pouvoir d’un vocabulaire partagé 28
Comment utiliser les design patterns ? 29
Votre boîte à outils de concepteur 32
Solutions des exercices 34
2 le Pattern Observer
Tenez vos objets au courant
Ne manquez plus jamais rien d’intéressant ! Nous avons un pattern qui met vos objets au
courant quand il se passe quelque chose qui pourrait les concerner. Ils peuvent même décider au moment de
l’exécution s’ils veulent rester informés. Observateur est l’un des patterns le plus utilisé dans le JDK et il est
incroyablement utile. Avant la fin de ce chapitre, nous étudierons également les relations « un-à-plusieurs » et
le faible couplage (oui, oui, nous avons dit couplage). Avec Observateur, vous serez l’attraction de la soirée
Patterns.
La station météorologique 39
Faites connaissance avec le pattern Observateur 44
Diffusion + Souscription = pattern Observateur 45
Comédie express : un sujet d’observation 48
Le pattern Observateur : définition 51
Le pouvoir du faible couplage 53
Concevoir la station météo 56
Implémenter la station météo 57
Utiliser le pattern Observateur de Java 64
La face cachée de java.util.Observable 71
Votre boîte à outils de concepteur 74
Solutions des exercices 783 le pattern décorateur
Décorer les objets
Ce chapitre pourrait s’appeler « Les bons concepteurs se méfient de l’héritage ».
Nous allons revoir la façon dont on abuse généralement de l’héritage et vous allez apprendre comment
« décorer » vos classes au moment de l’exécution en utilisant une forme de composition. Pourquoi ? Une fois que
vous connaîtrez les techniques de décoration, vous pourrez affecter à vos objets (ou à ceux de quelqu’un
d’autre) de nouvelles responsabilités sans jamais modifier le code des classes sous-jacentes.
Bienvenue chez Starbuzz Coffee 80
Le principe Ouvert-Fermé 86
Faites connaissance avec le pattern Décorateur 88
Construire une boisson avec des décorateurs 89
Le pattern Décorateur : définition 91
Décorons nos boissons 92
Écrire le code de Starbuzz 95
Décorateurs du monde réel : les E/S Java 100
Écrire votre propre décorateur d’E/S Java1 102
Votre boîte à outils de concepteur 105
Solutions des exercices 106
4 les patterns fabriques
Un peu de cuisine orientée objet
Apprêtez-vous à confectionner des conceptions OO faiblement couplées. Créer des
objets ne se limite pas à utiliser l’opérateur new. Vous allez apprendre que l’instanciation est une activité qui
ne devrait pas toujours être publique et qui peut souvent entraîner des problèmes de couplage. Et vous n’en
avez pas vraiment envie, n’est-ce pas ? Découvrez comment les patterns fabriques peuvent vous aider à vous
libérer de dépendances embarrassantes.
Quand vous voyez « new », pensez « concret » 110
À la Pizzeria d’Objectville 112
Encapsuler la création des objets 114
Construire une simple fabrique de pizzas 115
Fabrique Simple : définition 117
Une structure pour la pizzeria 120
Laisser les sous-classes décider 121
Créer une pizzeria 123
Déclarer une méthode de fabrique 125
Il est enfin temps de rencontrer le pattern Fabrication 131
Hiérarchies de classes parallèles 132
Le Pattern Fabrication : définition 134
Une Pizzeria très dépendante 137
Problèmes de dépendance des objets 138
Le principe d’inversion des dépendances 139
Pendant ce temps, à la pizzeria... 144
Familles d’ingrédients... 145
Construire nos fabriques d’ingrédients 146
Un coup d’oeil à Fabrique abstraite 153
Dans les coulisses 154
Le pattern Fabrique abstraite : définition 156
Fabrication et Fabrique Abstraite comparés 160
Votre boîte à outils de concepteur 162
Solutions des exercices 1645 le Pattern Singleton
Des objets uniques en leur genre
Notre prochain arrêt est le Pattern Singleton notre passeport pour la création d’objets
uniques en leur genre dont il n’existe qu’une seule instance. Vous allez sûrement être ravi d’apprendre que,
parmi tous les patterns, le Singleton est le plus simple en termes de diagramme de classes. En fait, ce
diagramme ne contient qu’une seule classe ! Mais ne vous méprenez pas : malgré sa simplicité du point de vue
de la conception des classes, nous allons rencontrer pas mal de bosses et de nids de poule dans son
implémentation. Alors, bouclez vos ceintures.
Un objet et un seul 170
Le Petit Singleton 171
Disséquons l’implémentation du Pattern Singleton 173
Confessions d’un Singleton 174
La fabrique de chocolat 175
Le pattern Singleton : définition 177
Allo, le QG ? Nous avons un problème... 178
Vous êtes la JVM 179
Gérer le multithread 180
Singleton : questions et réponses 184
Votre boîte à outils de concepteur 186
Solutions des exercices 188
6 le pattern Commande
Encapsuler l’invocation
Dans ce chapitre, nous allons envisager l’encapsulation à un tout autre niveau:
nous allons encapsuler l’invocation des méthodes. Oui, en encapsulant les appels de
méthodes, nous allons pouvoir « cristalliser » des traitements afin que l’objet qui les invoque n’ait pas besoin de
savoir comment il sont exécutés : il suffit qu’il utilise nos méthodes cristallisées pour obtenir un résultat. Nous
pourrons même faire des choses drôlement futées avec ces appels de méthodes encapsulés, par exemple les
sauvegarder pour la journalisation ou les réutiliser pour implémenter des annulations dans notre code.
Maisons de rêve 192
La télécommande 193
un coup d’oeil aux classes des fournisseurs 194
Pendant ce temps, à la cafétéria... 197
Étudions les interactions 198
Rôles et responsabilités 199
De la Cafeteria au pattern Commande 201
Notre premier objet de commande 203
Le pattern Commande : définition 206
Le pattern Commande et la télécommande 208
Implémenter la télécommande 210
Tester la télécommande 212
Il est temps de rédiger cette documentation... 215
Utiliser un état pour implémenter une annulation 220
Toute télécommande a besoin d’un mode groupé ! 224
Utiliser une macrocommande 225
Autres utilisations de Commande : files de requêtes 228
Autres utilisations de Commande : journalisation des requêtes 229
Votre boîte à outils de concepteur 230
Solutions des exercices 2327 les patterns Adaptateur et Facade
Savoir s’adapter
Dans ce chapitre, nous allons entreprendre des choses impossibles, comme faire
entrer une cheville ronde dans un trou carré. Cela vous semble impossible ? Plus maintenant
avec les design patterns. Vous souvenez-vous du pattern Décorateur ? Nous avons enveloppé des objets pour
leur attribuer de nouvelles responsabilités. Nous allons recommencer, mais cette fois avec un objectif
différent : faire ressembler leurs interfaces à quelque chose qu’elles ne sont pas. Pourquoi donc ? Pour pouvoir
adapter une conception qui attend une interface donnée à une classe qui implémente une interface différente.
Et ce n’est pas tout. Pendant que nous y sommes, nous allons étudier un autre pattern qui enveloppe des objets
pour simplifier leur interface.
Nous sommes entourés d’adaptateurs 236
Adaptateurs orientés objet 237
Le pattern Adaptateur expliqué 241
Le pattern Adaptateur : définition 243
Adaptateurs de classe et adaptateurs d’objet 244
Face-à-face : l’Adaptateur d’objet et l’Adaptateur de classe 247
Adaptateurs du monde réel 248
Adapter une Enumeration à un Iterator 249
Face-à-face : Décorateur et Adaptateur 252
Home Cinéma 255
Lumières, Caméra, Façade ! 258
Construire la façade de votre home cinéma 261
Le pattern Façade : définition 264
Ne parlez pas aux inconnus 265
Votre boîte à outils de concepteur 270
Solutions des exercices 272
8 le pattern Patron de méthode
Encapsuler les algorithmes
Nous n’arrêtons pas d’encapsuler. Nous avons encapsulé la création d’objets et
l’invocation de méthodes. Nous avons encapsulé des interfaces complexes, des
canards, des pizzas... Par quoi pourrions nous continuer ? Nous allons entreprendre
d’encapsuler des fragments d’algorithmes afin que les sous-classes puissent s’y adapter au moment de leur
choix. Nous allons même découvrir un principe de conception inspiré par Hollywood.
Des classes pour préparer le café et le thé 277
Puis-je transformer votre café en abstraction ? 280
Approfondir la conception 281
Abstraire suivreRecette() 282
Qu’avons-nous fait ? 285
Faites connaissance avec Patron de méthode 286
Préparons un peu de thé 287
Que nous a apporté le Patron de méthode ? 288
Le pattern Patron de méthode : définition 289
Code à la loupe 290
Méthodes adaptateurs et Patron de méthode... 292
Utiliser la méthode adaptateur 293
Café ? Thé ? Exécutons le test 294
Le principe d’Hollywood 296
Principe d’Hollywood et Patron de méthode 297
Patrons de méthode à l’état sauvage 299
Trier avec Patron de méthode 300
Nous avons des canards à trier... 301
Comparer des canards et des canards 302Les secrets de la machine à trier les canards 304
Les adaptateurs de Swing 306
Applets 307
Face-à-face : Patron de méthode et stratégie 308
Votre boîte à outils de concepteur 311
Solutions des exercices 312
9 les patterns Itérateur et Composite
Des collections bien gérées
Il y a des quantités de façon de placer des objets dans une
collection. Tableaux, piles, listes, tables de hachage : vous avez le choix. Chacune a ses avantages et ses
inconvénients. Mais il y aura toujours un moment où votre client voudra opérer des itérations sur ces objets.
Allez-vous alors lui montrer votre implémentation ? Espérons que non ! Ce serait un manque de
professionnalisme absolu. Eh bien vous n’avez pas besoin de risquer votre carrière. Vous allez voir comment
autoriser vos clients à procéder sans même jeter un coup d’œil à la façon dont vous stockez vos objets. Vous
apprendrez également à créer des super collections d’objets qui peuvent parcourir des structures de données
impressionnantes d’un seul trait. Et si cela ne suffit pas, vous allez découvrir une chose ou deux sur les
responsabilités des objets.
Fusion de la Cafétéria et de la Crêperie d’Objectville 316
Les implémentations de Léon et Noël 318
Pouvons-nous encapsuler l’itération ? 323
Faites connaissance avec le pattern Itérateur 325
Ajoutons un itérateur à MenuCafeteria 326
Examiner la conception actuelle 331
Une conception plus propre avec java.util.Iterator 333
Où cela nous amène-t-il ? 335
Le pattern Itérateur : définition 336
Une seule responsabilité 339
Itérateurs et collections 348
Itérateurs et collections en Java 5 349
Juste au moment où nous pensions avoir terminé... 353
Le pattern Composite : définition 356
Concevoir des menus avec Composite 359
Implémenter le Composite 362
Flash-back sur Itérateur 368
L’itérateur nul 372
La magie d’Itérateur et Composite en duo... 374
Votre boîte à outils de concepteur 380
Solutions des exercices 38110
L’état des choses
le pattern Etat
Un fait méconnu : les patterns Stratégie et État sont des jumeaux qui ont été
séparés à la naissance. Comme vous le savez, le pattern Stratégie a créé une affaire des plus
florissantes sur le marché des algorithmes interchangeables. Quant à lui, État a peut-être suivi une voie plus
noble : il aide les objets à contrôler leur comportement en modifiant leur état interne. On le surprend souvent à
dire à ses clients « Répétez après moi : Je suis bon, je suis intelligent, ma simple présence suffit... »
Comment implémenter un état ? 387
Machines à états : première mouture 388
Premier essai de machine à états 390
Vous vous y attendiez... une demande de changement ! 394
Nous sommes dans un drôle d’état... 396
Définir l’interface et les classes pour les états 399
Implémenter les classes pour les états 401
Retravaillons le distributeur 402
Le pattern État : définition 410
État vs Stratégie 411
Bilan de santé 417
Nous avons failli oublier ! 420
Votre boîte à outils de concepteur 423
Solutions des exercices 424
11 le pattern proxy
Contrôler l’accès aux objets
Avez-vous déjà joué à « gentil flic, méchant flic » ? Vous êtes le gentil policier et vous
rendez volontiers service de bonne grâce, mais comme vous ne voulez pas que qui que ce soit vous sollicite,
vous demandez au méchant de servir d’intermédiaire. C’est là le rôle d’un proxy : contrôler et gérer les accès.
Comme vous allez le voir, un proxy peut se substituer à un objetd’une quantité de façons. Les proxies sont
connus pour transporter des appels de méthodes entiers sur l’Internet à la place d’autres objets. On les connaît
également pour remplacer patiemment un certain nombre d’objets bien paresseux.
Contrôler les distributeurs 430
Le rôle du proxy distant 434
Détour par RMI 437
Un Proxy pour le distributeur 450
Les coulisses du proxy distant 458
Le pattern Proxy : définition 460
Prêts pour le Proxy virtuel ? 462
Concevoir le proxy virtuel pour les pochettes de CD 464
Les coulisses du proxy virtuel 470
Utiliser la classe Proxy de l’API Java 474
Comédie express : des sujets sous protection 478
Créer un proxy dynamique 479
Le zoo des proxys 488
Votre boîte à outils de concepteur 491
Solutions des exercices 49212
Patterns de patterns
patterns composés
Qui aurait cru que les patterns étaient capables de
collaborer ? Vous avez déjà été témoin de l’animosité qui règne dans les face-à-face (et vous n’avez pas vu
le combat à mort que l’éditeur nous a forcés à retirer de ce livre). Alors qui aurait pu penser que des patterns
pourraient finir par s’entendre ? Eh bien, croyez-le ou non, certaines des conceptions OO les plus puissantes
font appel à plusieurs patterns. Apprêtez-vous à passer à la vitesse supérieure : il est temps d’étudier les
patterns composés.
Patterns composés 500
Réunion de famille 501
Ajouter un adaptateur 504
Ajouter un décorateur 506
Ajouter une fabrique 508
Ajouter un composite et un itérateur 513
Ajouter un observateur 516
Résumé des patterns 523
Vue plongeante : le diagramme de classes 524
Modèle-Vue-Contrôleur , la chanson 526
Les design patterns sont la clé de MVC 528
Mettons nos lunettes « spéciales patterns » 532
Contrôler le tempo avec MVC... 534
Le Modèle 537
La Vue 539
Le Contrôleur 542
Explorer le pattern Stratégie 545
Adapter le modèle 546
Maintenant, nous sommes prêts à contrôler un cœur 547
MVC et le Web 549
Design patterns et Model 2 557
Votre boîte à outils de concepteur 560
Solutions des exercices 561
13 mieux vivre avec les patterns
Les patterns dans le monde réel
Maintenant, vous êtes prêt à vivre dans un monde nouveau, un monde peuplé
de Design Patterns. Mais avant de vous laisser ouvrir toutes ces nouvelles portes, nous devons aborder
quelques détails que vous rencontrerez dans le monde réel. Eh oui, les choses y sont un peu plus complexes
qu’elles ne le sont ici, à Objectville. Suivez-nous ! Vous trouverez à la page suivante un guide extra qui vous
aidera à effectuer la transition...
Le guide d’Objectville 578
Design Pattern : définition 579
Regardons la définition de plus près 581
Que la force soit avec vous 582
Catalogues de patterns 583
Comment créer des patterns 586
Donc, vous voulez être auteur de patterns…? 587
Organiser les design patterns 589
Penser en termes de patterns 594
Votre esprit et les patterns 597
N’oubliez pas le pouvoir du vocabulaire partagé 599
Les cinq meilleures façons de partager votre vocabulaire 600
Tour d’Objectville avec la Bande des quatre 601
Votre voyage ne fait que commencer... 602
Autres ressources sur les design patterns 603
Le zoo des patterns 604Annihiler le mal avec les anti-patterns 606
Votre boîte à outils de concepteur 608
Quitter Objectville... 609
14 annexe
Les patterns restants
La popularité n’est pas donnée à tout le monde. Beaucoup de choses ont changé ces dix
dernières années. Depuis la parution de Design Patterns : Catalogue de modèles de conception réutilisables, les
développeurs ont appliqué ces patterns des milliers de fois. Ceux que nous avons résumés ici sont des patterns
GoF à part entière. Bien qu’ils soient tout aussi officiels que ceux que nous avons étudiés jusqu’à maintenant,
leur emploi est moins fréquent. Mais ils sont tout aussi remarquables, et, si la situation le demande, vous
pouvez les utiliser la tête haute. Dans cette annexe, notre objectif est de vous donner une vue d’ensemble de ces
patterns.
Pont 612
Monteur 614
Chaîne de responsabilité 616
Poids-mouche 618
Interprète 620
Médiateur 622
Mémento 624
Prototype 626
Visiteur 628
I Index 631Vous pouvez aussi lire