En informatique, et plus particulièrement en développement logiciel, un patron de conception (souvent appelé ) est un arrangement caractéristique de modules, reconnu comme bonne pratique en réponse à un problème de conception d'un logiciel. Il décrit une solution standard, utilisable dans la conception de différents logiciels Rajib Mall, Fundamentals of Software Engineering, PHI Learning Pvt. Ltd. , p. 266..

Un patron de conception est issu de l'expérience des concepteurs de logicielsLaurent Debrauwer, Design patterns pour Java : Les 23 modèles de conception : descriptions et solutions illustrées en UML 2 et Java, ENI, 2009 .. Il décrit un arrangement récurrent de rôles et d'actions joués par des modules d'un logiciel, et le nom du patron sert de vocabulaire commun entre le concepteur et le programmeur Frank Buschmann, Kevlin Henney et Douglas C. Schmidt, Pattern-oriented software architecture: On patterns and pattern languages, John Wiley and Sons, 2007 , p. 13.. D'une manière analogue à un motif de conception en architecture, le patron de conception décrit les grandes lignes d'une solution, qui peuvent ensuite être modifiées et adaptées en fonction des besoins Linda Rising, , , 1998 , p. 311..

Les patrons de conception décrivent des procédés de conception généraux et permettent en conséquence de capitaliser l'expérience appliquée à la conception de logiciel. Ils ont une influence sur l'architecture logicielle d'un système informatique.

vignette|droite|Le patron proxy.

Types de patrons Les patrons de conception ne sont ni des patrons d'architecture ni des idiotismes de programmation. Un patron de conception est la meilleure solution connue à un problème de conception récurrent. Un patron d'architecture est la meilleure solution connue à un problème d'architecture récurrent. Il apporte des solutions sur la manière de concevoir l'organisation à grande échelle (architecture) d'un logiciel en faisant abstraction des détails. Il concerne la structure générale d'un logiciel, sa subdivision en unités plus petites, comporte des guides de bonnes pratiques et des règles générales qui ne peuvent pas être traduites directement en code source Rajib Mall, Fundamentals of Software Engineering, op. cit., p. 267. Le patron de conception suggère un arrangement, une manière d'organiser des modules ou des classes. Il décrit une organisation de classes fréquemment utilisée pour résoudre un problème récurrent. Le patron de conception parle d'instances, de rôles et de collaboration. L'idiotisme de programmation est une construction spécifique à un langage de programmation, qui est une manière usuelle de mettre en œuvre une solution à un problème dans ce langage de programmation. Par exemple pour effectuer cent fois une opération, un programmeur en langage C utilise les instructions for (i = 0; i < 100; i++) pour sa ligne de code. L'utilisation d'un idiotisme par le programmeur lui évite d'avoir à remettre en question la structure détaillée du programme et améliore la qualité du produit.

Description

Les patrons servent à documenter des bonnes pratiques basées sur l'expérience. Ils proposent des solutions à des problèmes qui peuvent être difficilement résolus par un seul composant : la description de la plupart des patrons implique plusieurs rôles qui peuvent être joués par plusieurs composants d'un logiciel. Par exemple, le patron implique deux rôles qui sont le sujet et l'observateur Buschmann, Henney et Schmidt, Pattern-oriented software architecture: On patterns and pattern languages, op. cit..

Les patrons apportent un vocabulaire commun entre l'architecte informatique et le programmeur. Si le programmeur connaît le patron de conception observer, alors l'architecte informatique n'aura pas besoin de lui donner de longues explications et le dialogue se limitera à .

En programmation informatique, les patrons de conception peuvent être utilisés avant, pendant, ou après le travail de programmation : utilisé avant, le programmeur utilisera le patron comme guide lors de l'écriture du code source ; utilisé après, il servira comme exemple pour relier différents modules de code source déjà écrits, ce qui implique d'écrire le code source nécessaire à leur liaison, et le code qui les fera correspondre au patron de conception ; s'il est utilisé pendant le travail de programmation, le programmeur constatera que le code qui vient d'être écrit a des points communs avec un patron existant et effectuera les modifications nécessaires pour que le code corresponde au patron Stephen Hendrick Kaisler, , , 39, 2005 .. La bonne pratique consiste toutefois à n'utiliser un patron qu'une fois qu'il est clair que sa flexibilité est nécessaire Bill Venners, « ». .

Histoire Formalisés dans le livre du « Gang of Four » (GoF, Erich Gamma, Richard Helm, Ralph Johnson et ) intitulé Design Patterns – Elements of Reusable Object-Oriented Software en 1994. Les patrons de conception tirent leur origine des travaux de l'architecte Christopher Alexander dans les années 70, dont son livre A Pattern Language définit un ensemble de patrons d'architecture.

Citations — Christopher Alexander, 1977. — Buschmann, 1996.

Formalisme La description d'un patron de conception suit un formalisme fixe : Nom ; Description du problème à résoudre ; Description de la solution : les éléments de la solution, avec leurs relations. La solution est appelée patron de conception ; Conséquences : résultats issus de la solution.

Ce formalisme aide surtout à mieux comprendre l'utilisation et la logique interne de chaque patron, mais ne correspond pas à l'usage habituel du terme. Le mot structure serait peut-être plus adapté.

Un aspect de construction plus important est l'orthogonalité : chaque patron doit correspondre à une approche différente, qui ne répète pas les idées ou stratégies présentes dans d'autres patrons. Cette qualité permet au concepteur d'analyser un problème et d'en résoudre chaque aspect d'une façon organisée, ainsi que de combiner les patrons pour construire une solution. Certains auteurs voient un manque d'orthogonalité dans les patrons GoF, tandis que d'autres en proposent encore davantage (Vlissides, Grand).

Patrons de conception du GoF Les patrons de conception ont été formellement reconnus en 1994 à la suite de la parution du livre , co-écrit par quatre auteurs : Gamma, Helm, Johnson et Vlissides ( ; en français « la bande des quatre »). Ce livre, devenu un best-seller, décrit vingt-trois « patrons GoF » et comment s'en servir James William Cooper, , Addison-Wesley Professional - 2000 ..

Il existe trois familles de patrons de conception selon leur utilisation : créateurs : ils définissent comment faire l'instanciation et la configuration des classes et des objets ; structuraux : ils définissent comment organiser les classes d'un programme dans une structure plus large (séparant l'interface de l'implémentation) ; comportementaux : ils définissent comment organiser les objets pour que ceux-ci collaborent (distribution des responsabilités) et expliquent le fonctionnement des algorithmes impliqués.

Les vingt-trois patrons GoF : Fabrique et Fabrique abstraite Ce patron fournit une interface pour créer des familles d'objets sans spécifier la classe concrète Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, , - 1994 .. Le patron fabrique, ou méthode fabrique (en anglais factory ou factory method) est un patron récurrent. Une fabrique simple retourne une instance d'une classe parmi plusieurs possibles, en fonction des paramètres qui ont été fournis. Toutes les classes ont un lien de parenté, et des méthodes communes, et chacune est optimisée en fonction d'une certaine donnée. Le patron fabrique abstraite (en anglais ) va un peu plus loin que la fabrique simple. Une fabrique abstraite est utilisée pour obtenir un jeu d'objets connexes. Par exemple pour implémenter une charte graphique : il existe une fabrique qui retourne des objets (boutons, menus) dans le style de Microsoft Windows, une qui retourne des objets dans le style de Motif, et une dans le style de Macintosh. Une fabrique abstraite est obtenue en utilisant une fabrique simple. Adaptateur Ce patron convertit l'interface d'une classe en une autre interface exploitée par une application. Permet d'interconnecter des classes qui sans cela seraient incompatibles. Il est utilisé dans le cas où un programme se sert d'une bibliothèque de classe qui ne correspond plus à l'utilisation qui en est faite, à la suite d'une mise à jour de la bibliothèque dont l'interface a changé. Un objet adaptateur (en anglais ) expose alors l'ancienne interface en utilisant les fonctionnalités de la nouvelle. Pont Ce patron permet de découpler une abstraction de son implémentation, de telle manière qu'ils peuvent évoluer indépendamment. Il consiste à diviser une implémentation en deux parties : une classe d'abstraction qui définit le problème à résoudre, et une seconde classe qui fournit une implémentation. Il peut exister plusieurs implémentations pour le même problème et la classe d'abstraction comporte une référence à l'implémentation choisie, qui peut être changée selon les besoins Stephen Stelting - Olav Maassen, , - 2002 .. Le patron pont (en anglais ) est fréquemment utilisé pour réaliser des récepteurs d'événements Dustin Diaz - Ross Harmes, , - 2007 .. Monteur Ce patron sépare le processus de construction d'un objet du résultat obtenu. Permet d'utiliser le même processus pour obtenir différents résultats. C'est une alternative au pattern fabrique. Au lieu d'une méthode pour créer un objet, à laquelle est passée un ensemble de paramètres, la classe fabrique comporte une méthode pour créer un objet . Cet objet comporte des propriétés qui peuvent être modifiées et une méthode pour créer l'objet final en tenant compte de toutes les propriétés. Ce pattern est particulièrement utile quand il y a de nombreux paramètres de création, presque tous optionnels Joshua Bloch, , - 2008 .. Chaîne de responsabilité Le patron chaîne de responsabilité (en anglais ) vise à découpler l’émission d'une requête de la réception et le traitement de cette dernière en permettant à plusieurs objets de la traiter successivement. Dans ce patron chaque objet comporte un lien vers l'objet suivant, qui est du même type. Plusieurs objets sont ainsi attachés et forment une chaîne. Lorsqu'une demande est faite au premier objet de la chaîne, celui-ci tente de la traiter, et s'il ne peut pas il fait appel à l'objet suivant, et ainsi de suite Carlo Chung, , - 2011 .. Commande Ce patron emboîte une demande dans un objet, permettant de paramétrer, mettre en file d'attente, journaliser et annuler des demandes. Dans ce patron un objet commande (en anglais ) correspond à une opération à effectuer. L'interface de cet objet comporte une méthode execute. Pour chaque opération, l'application va créer un objet différent qui implémente cette interface . L'opération est lancée lorsque la méthodeexecute est utilisée. Ce patron est notamment utilisé pour les barres d'outils Andrei Alexandrescu, , - 2001 .. Composite Le patron composite (même nom en anglais) permet de composer une hiérarchie d'objets, et de manipuler de la même manière un élément unique, une branche, ou l'ensemble de l'arbre. Il permet en particulier de créer des objets complexes en reliant différents objets selon une structure en arbre. Ce patron impose que les différents objets aient une même interface, ce qui rend uniformes les manipulations de la structure. Par exemple dans un traitement de texte, les mots sont placés dans des paragraphes disposés dans des colonnes dans des pages ; pour manipuler l'ensemble, une classe composite implémente une interface. Cette interface est héritée par les objets qui représentent les textes, les paragraphes, les colonnes et les pages Mark Grand, , - 2003 .. Décorateur