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 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