Qu’est ce qu’un design pattern ?

Armand Fardeau
4 min readMay 7, 2018

--

Depuis les débuts de l’informatique, les développeurs ont remarqué que les problématiques de conception étaient bien souvent les mêmes. Et ils ont eu l’idée au lieu de réinventer la roue à chaque fois, de conceptualiser ces motifs de conception afin de pouvoir les réutiliser.

Cette conceptualisation ne se traduit pas par du code directement mais plutôt par une idée abstraite de comment résoudre le problème récurrent. Libre au développeur de l'implémenter dans son langage de prédilection.

Si on trouve de nombreux exemple de design patterns sous forme de code, c’est parce qu’il s’agit d’exemples appliqués à tel ou tel langage.

Réinventer la roue

Un concept qui provient du génie civil

Les design patterns sont à l’origine issue de l’architecture, en particulier d’un concept de Christopher Alexander (1977/79). En 1987, Kent Beck et Ward Cunningham ont commencé à expérimenter l’idée d’appliquer ces modèles à la programmation. Au cours des années suivantes, Beck, Cunningham et d’autres ont assuré le suivi de ce travail.

Les modèles de design ont gagné en popularité en informatique après le livre Design Patterns : Elements of Reusable Object-Oriented Software publié en 1994 par le “Gang of Four” (Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides), souvent abrégé en “GoF”.

Design Patterns : Elements of Reusable Object-Oriented Software

Pourquoi utiliser un design pattern?

  • Pour accélérer le processus de développement en fournissant des paradigmes de développement éprouvés.
  • Pour anticiper des problématiques qui peuvent ne devenir visibles que plus tard dans la mise en œuvre.
  • Pour améliorer la lisibilité du code en fournissant une standardisation.

Exemple de design pattern:

Observer Pattern

  • Considérons un objet Employee qui perçoit unsalary. Nous aimerions pouvoir modifier son salaire et tenir le système de paie au courant de ces modifications. La façon la plus simple d'y parvenir est de passer une référence à la paie (payroll)et de l'informer chaque fois que nous modifions le salary de l'employé.
  • Le problème est que si nous voulons notifier quelqu’un d’autre (TaxMan, par exemple), nous devons modifier l'employé. Cela signifie que d'autres classes sont à l'origine des changements apportés à Employee, même si rien n'y a changé. Fournissons un moyen de garder une liste des objets intéressés sur les changements de salaire.
Observer pattern
  • Maintenant nous pouvons utiliser la méthode attach pour ajouter autant d'objets que nous voulons à la liste des observateurs, et tous seront notifiés chaque fois que le salaire change.

Attention à l’anti-pattern

Un anti-modèle (anti pattern)est une réponse commune à un problème récurrent qui est généralement inefficace et risque d’être très contre-productif.

Le terme inventé en 1995 par Andrew Koenig, a été popularisé trois ans plus tard par le livre AntiPatterns, qui a étendu son utilisation au-delà du domaine de la conception de logiciels pour se référer de manière informelle à toute solution couramment réinventée mais mauvaise à un problème.

Anti Patterns

Comment définir un anti-pattern?

Selon les auteurs de Design Patterns, il doit y avoir au moins deux éléments clés pour distinguer formellement un anti-pattern réel d’une simple mauvaise habitude, mauvaise pratique ou mauvaise idée :

  • Un processus, une structure ou un modèle d’action couramment utilisé qui, malgré le fait qu’il semble être une réponse appropriée et efficace à un problème, a plus de mauvaises conséquences que de bonnes.
  • Il existe une autre solution qui est documentée, reproductible et dont l’efficacité a été démontrée.

Liste des design patterns:

Il n’existe pas à proprement parlé de liste exhaustive des design patterns, car des modèles de design utiles sont découverts tout le temps. Néanmoins Wikipedia fourni une liste assez complète:

Pour aller plus loin:

Design pattern en ruby

Cet article vous a appris quelque chose? Vous avez trouvé une coquille? Faites le moi-savoir !

--

--

Armand Fardeau

Humble dev on the full stack path. Raspberry / Arduino enthusiast. Student @HETIC. https://github.com/armandfardeau