
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.
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” ?
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
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
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 comportementale
Chaine de responsabilité (chain of responsability):
aide à construire une chaîne d'objets.
Commander (command):
permet d'encapsuler des actions dans des objets → fournir les moyens de découpler le client du récepteur.
Itérateur (Iterator):
moyen d'accéder aux éléments d'un objet sans exposer la présentation sous-jacente.
Médiateur (mediator):
ajoute un objet tiers pour contrôler l'interaction entre deux objets → réduire le couplage entre les classes communiquant entre elles.
Mémento (memento):
capturer et stocker l'état actuel d'un objet de manière à ce qu'il puisse être restauré ultérieurement de manière fluide.
Observateur (observer):
Définit une dépendance entre les objets
Visiteur (visitor):
Permet d'ajouter d'autres opérations aux objets sans avoir à les modifier.
Stratégie (strategy):
Changer d'algorithme ou de stratégie en fonction de la situation.
Etat (state):
Modifier le comportement d'une classe lorsque l'état change.
Méthode de modèle (template method):
Définit le squelette de la façon dont un certain algorithme peut être exécuté
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, les développeurs de TKT seront ravis de répondre à vos questions
Participer à la conversation