Ce concept de design pattern est arrivé dans les années 70 puis formalisé dans le livre du “Gang of Four” : Erich Gamma, Richard Helm, Ralph Johnson, et John Vlissides, en 1994 : “Design Patterns – Elements of reusable object-oriented software”. Dans ce livre, 23 modèles de conception y sont présentés, les plus répandus aujourd’hui, même s’il en existe des dizaines d’autres.

Qu’est-ce qu’un design pattern ou “modèle de conception” ?

Résumé simplement, un design pattern est un schéma représentant une solution à un problème récurrent dans le monde de la programmation.

Retranscrit dans la réalité, on pourrait prendre l’exemple du correcteur automatique de nos ordinateurs ou smartphones. Dans un message, par précipitation ou faute d’attention, combien faisons-nous de fautes d’orthographe que notre cher correcteur corrige pour nous, nous évitant ainsi bon nombre d’erreurs de compréhension ou de lapsus ? 

Eh bien les programmateurs, dans leur domaine de prédilection, ont eux aussi prévu ces erreurs et créé un modèle pour y remédier. 

L’objectif principal des design pattern est de réduire le temps de conception d’une application tout en augmentant la qualité du résultat.

Un design pattern suit une structure fixe : 

  • Un nom
  • Une problématique : description du problème
  • Une description de la solution
  • Des conséquences c’est-à-dire des avantages et inconvénients

En programmation informatique, les design patterns peuvent être utilisés avant, pendant, ou après le travail de programmation : 

  • Avant : le programmeur utilisera le design pattern comme guide lors de l’écriture du code source 
  • Utilisé pendant : le programmeur constatera que le code qui vient d’être écrit a des points communs avec un design pattern existant et effectuera les modifications nécessaires pour que le code corresponde au patron
  • Après : il servira comme exemple pour relier différents modules de code source déjà écrits.

L’architecte Christopher Alexander constate que la phase de conception, en architecture, s’accompagne de difficultés récurrentes. Afin de résoudre ces problèmes de solidité de la structure, il crée un ensemble de 253 patterns.

« Chaque design pattern décrit un problème qui se manifeste constamment dans notre environnement et donc décrit le cœur de la solution à ce problème, d’une façon telle que l’on puisse réutiliser cette solution des millions de fois sans jamais le faire deux fois de la même manière. »

Parmi ces 253 patterns, Christopher Alexander en a adapté 23 aux design pattern, regroupés dans 3 grandes familles : 

  • Motifs de création
  • Motifs de structuration
  • Motifs de comportement

Chacune de ces familles comportent des modèles principaux, que nous allons introduire :

La première famille, les motifs de création, composée de 5 modèles :

ModèlesDescription
Fabrique (Factory)Créer un objet dont le type dépend du contexte
Fabrique abstraite (abstract Factory)Fournir une interface unique pour instancier des objets d’une même famille sans avoir à connaître les classes à instancier
Monteur (Builder)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
Prototype (Prototype)Création d’objet à partir d’un prototype
Singleton (Singleton)Classe qui ne pourra avoir qu’une seule instance

La seconde représente les modèles de structuration :

ModèlesDescription
Adaptateur (adaptor)Permet d’encapsuler un objet autrement incompatible dans un adaptateur pour le rendre compatible avec une autre classe.
Pont (bridge)Consiste à préférer la composition à l’héritage. Les détails d’implémentation sont poussés d’une hiérarchie vers un autre objet avec une hiérarchie distincte.
Composite (composite)Permet aux clients de traiter les objets individuels de manière uniforme.
Décorateur (decorator)Modifie dynamiquement le comportement d’un objet au moment de l’exécution en l’enveloppant dans un objet d’une classe de décorateur.
Façade (facade)Fournit une interface simplifiée à un sous-système complexe.
Poids mouche (flyweight)Utilisé pour minimiser l’utilisation de la mémoire ou les dépenses de calcul en partageant autant que possible avec des objets similaires.
Procuration (proxy)Une classe représente la fonctionnalité d’une autre classe.

Les modèles de conception comportementaux :

ModèlesDescription
Adaptateur (adaptor)Permet d’encapsuler un objet autrement incompatible dans un adaptateur pour le rendre compatible avec une autre classe.
Pont (bridge)Consiste à préférer la composition à l’héritage. Les détails d’implémentation sont poussés d’une hiérarchie vers un autre objet avec une hiérarchie distincte.
Composite (composite)Permet aux clients de traiter les objets individuels de manière uniforme.
Décorateur (decorator)Modifie dynamiquement le comportement d’un objet au moment de l’exécution en l’enveloppant dans un objet d’une classe de décorateur.
Façade (facade)Fournit une interface simplifiée à un sous-système complexe.
Poids mouche (flyweight)Utilisé pour minimiser l’utilisation de la mémoire ou les dépenses de calcul en partageant autant que possible avec des objets similaires.
Procuration (proxy)Une classe représente la fonctionnalité d’une autre classe.

Un avantage supplémentaire aux designs pattern : l’apprentissage cognitif.

En effet, au-delà des bénéfices qu’ils apportent aux programmateurs, ces design pattern servent également à l’utilisateur, via l’UX/UI Design. En interagissant avec les produits, les utilisateurs prennent des habitudes. Ils recherchent naturellement un modèle qu’ils connaissent déjà, par exemple un bouton ayant telle apparence.

Face à un problème récurrent en conception, les design patterns sont des solutions standardisées, modifiables et adaptables. Ils facilitent également le travail d’équipe entre les concepteurs. Enfin, les patterns correspondent aussi aux habitudes des utilisateurs et leur procurent donc une meilleure expérience.

Si vous souhaitez en savoir plus, nos développeurs seront ravis de répondre à vos questions 😉 

En savoir plus sur les solutions digitales sur mesure ?

CONTACTEZ-NOUS