Design patterns tête la première

La page est créée Matthieu Bouchet
 
CONTINUER À LIRE
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 611
Table 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 78
3           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 164
5              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 232
7              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 302
Les 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 381
10
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 492
12
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 604
Annihiler 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 631
Vous pouvez aussi lire