Design Patterns
Introduction
Sont des solutions typiques aux problèmes courants de conception de
logiciels.
Chaque modèle est comme un plan que vous pouvez personnaliser
pour résoudre un problème de conception particulier dans votre code.
Il ne s’agit pas d’un morceau de code préétabli, mais un concept
général pour résoudre un problème particulier.
A ne pas confondre avec les algorithmes. Un algorithme définit
toujours un ensemble clair d'actions qui peuvent atteindre un objectif,
un Design Pattern est une description de niveau plus élevé d'une
solution.
Introduction
La plupart des design patterns sont décrits de manière très formelle
afin que les gens puissent les reproduire dans de nombreux
contextes.
En général, dans la définition ou description de chaque DP, définit :
L'intention : décrit brièvement à la fois le problème et la solution.
La motivation : explique le problème et la solution que le modèle rend
possible.
La structure des classes : montre chaque partie du modèle et comment
elles sont liées.
Un exemple de code : dans l'un des langages de programmation
populaires facilite la compréhension de l'idée derrière le modèle.
Pourquoi étudier les DPs
En tant que programmeur, on peut bien coder sans connaître un seul
DP.
On peut aussi implémenter certains modèles sans même le savoir.
Alors pourquoi passer du temps à les étudier ?
1. Les DPs sont une boîte à outils de solutions éprouvées aux
problèmes courants de conception de logiciels. Même si vous ne
rencontrez jamais ces problèmes, connaître les modèles est
toujours utile car cela vous apprend à résoudre toutes sortes de
problèmes en utilisant les principes de la conception orientée
objet.
2. Les DPs définissent un langage commun qu’une équipe peut
utiliser pour communiquer plus efficacement.
Classification des DPs
Les DPs peuvent être classés en fonction de leur intention ou de leur
objectif.
On distingue généralement trois principaux groupes de DPs :
Les patterns de création (Creational patterns) : fournissent des
mécanismes de création d'objets qui augmentent la flexibilité et la
réutilisation du code existant.
Les patterns structurels (Structural patterns) : expliquent comment
assembler des objets et des classes dans des structures plus grandes, tout
en gardant ces structures flexibles et efficaces.
Les patterns de comportement (Behavioral patterns) : veillent à une
communication efficace et à l'attribution des responsabilités entre les
objets.
Patterns de Création
Les patterns de création – 1)
Singleton
Intention : permet de s’assurer qu'une classe n'a qu'une seule
instance, tout en fournissant un point d'accès global à cette instance.
Problème : le Singleton règle 2 problèmes :
S'assurer qu'une classe n'a qu'une seule instance
Fournissez un point d'accès global à cette instance.
Solution :
Rendre le constructeur par défaut privé,
Créez une méthode de création statique qui agit
comme un constructeur.
Le code ?
Les patterns de création – 1)
Singleton
Le code ?
Exemple en Java : Calendar, LocalDate, …
Les patterns de création – 2) Builder
Intention : Créer un objet complexe en étape
Le Builder est particulièrement utile lorsque la création.
Problème :
La création d'objets complexes tels que les objets de
configuration, les requêtes SQL, les documents XML, n’est pas
simple. Ces objets nécessitent un grand nombre de
paramètres et souvent ces objets doivent être
configurables de manière flexible.
Solution :
Utiliser un Builder qui configure petit à petit l’objet avant de le
créer.
Les patterns de création – 2) Builder
Code ?
Les patterns de création – 2) Builder
Exemples
Les patterns de création – 3) Factory
Intention : définit une interface pour créer des objets, et permet aux
sous-classes de choisir la classe concrète à instancier.
Problème :
résout principalement le problème de la création d'objets dans
des situations où vous ne savez pas à l'avance la classe exacte de
l'objet que vous souhaitez créer
Les patterns de création – 3) Factory
Code ?
Les patterns de création – 3) Factory
Exemples ?
Les patterns de création – 4)
Prototype
Intention : L'objectif principal du pattern Prototype est de permettre
la création d'objets sans spécifier leur classe exacte, mais plutôt en
se basant sur un objet existant comme modèle.
Problème :
Construction d’objet compliquée, gourmande en mémoire
Solution :
Utiliser le clonage, on clone les objets au lieu de passer par le
constructeur
Les patterns de création – 4)
Prototype
Codes ?
Les patterns de création – 4)
Prototype
Exemples