Introduction
Les motifs de conception sont très populaires parmi les développeurs de logiciels. Un motif de conception est une solution bien décrite à un problème logiciel courant.
Certains des avantages de l’utilisation des motifs de conception sont :
- Les motifs de conception sont déjà définis et fournissent une approche standard de l’industrie pour résoudre un problème récurrent, ce qui permet de gagner du temps si nous utilisons judicieusement le motif de conception. Il existe de nombreux motifs de conception Java que nous pouvons utiliser dans nos projets basés sur Java.
- L’utilisation des motifs de conception favorise la réutilisabilité qui conduit à un code plus robuste et hautement maintenable. Cela aide à réduire le coût total de possession (TCO) du produit logiciel.
- Étant donné que les motifs de conception sont déjà définis, cela rend notre code facile à comprendre et à déboguer. Cela conduit à un développement plus rapide et les nouveaux membres de l’équipe le comprennent facilement.
Les motifs de conception Java sont divisés en trois catégories – les motifs de conception créationnels, structurels, et comportementaux.
Cet article sert d’index pour tous les articles sur les motifs de conception Java.
Modèles de conception Créationnels
Les modèles de conception créatifs fournissent des solutions pour instancier un Object
de la meilleure façon possible pour des situations spécifiques.
1. Modèle Singleton
Le modèle singleton restreint l’instanciation d’une Class
et garantit qu’une seule instance de la classe existe dans la machine virtuelle Java. La mise en œuvre du modèle singleton a toujours été un sujet controversé parmi les développeurs.
Note: En savoir plus sur le Modèle de conception Singleton.
2. Modèle de Fabrique
Le modèle de conception de la fabrique est utilisé lorsque nous avons une superclasse avec plusieurs sous-classes et en fonction de l’entrée, nous devons renvoyer l’une des sous-classes. Ce modèle retire la responsabilité de l’instanciation d’une Class
du programme client à la classe de fabrique. Nous pouvons appliquer un modèle singleton sur la classe de fabrique ou rendre la méthode de fabrique static
.
Note: En savoir plus sur le Modèle de conception de la Fabrique.
3. Motif de l’usine abstraite
Le motif de l’usine abstraite est similaire au motif de l’usine et est une usine de fabriques. Si vous êtes familier avec le motif de conception d’usine en Java, vous remarquerez que nous avons une seule classe d’usine qui renvoie les différentes sous-classes en fonction de l’entrée fournie, et la classe d’usine utilise des déclarations if-else
ou switch
pour y parvenir. Dans le motif de l’usine abstraite, nous nous débarrassons du bloc if-else
et avons une classe d’usine pour chaque sous-classe, puis une classe d’usine abstraite qui renverra la sous-classe en fonction de la classe d’usine d’entrée.
Remarque : En savoir plus sur le Motif de l’usine abstraite.
4. Motif du constructeur
Le motif du constructeur a été introduit pour résoudre certains problèmes avec les motifs de conception d’usine et d’usine abstraite lorsque l’objet contient de nombreuses attributs. Ce motif résout le problème avec un grand nombre de paramètres optionnels et un état incohérent en fournissant une manière de construire l’objet étape par étape et de fournir une méthode qui renverra effectivement l’objet final Object
.
Note : Apprenez-en plus sur le modèle de constructeur.
5. Modèle de Prototype
Le modèle de prototype est utilisé lorsque la création d’un Objet
est coûteuse et nécessite beaucoup de temps et de ressources, et que vous avez un Objet
similaire déjà existant. Ainsi, ce modèle fournit un mécanisme pour copier l’Objet
original vers un nouvel Objet
puis le modifier selon nos besoins. Ce modèle utilise le clonage Java pour copier l’Objet
. Le modèle de conception de prototype exige que l’Objet
que vous copiez doit fournir la fonctionnalité de copie. Elle ne doit pas être réalisée par une autre classe. Cependant, l’utilisation de la copie superficielle ou profonde des propriétés de l’objet dépend des besoins et est une décision de conception.
Note : Apprenez-en plus sur le Modèle de Prototype.
Modèles de Conception Structurels
Les motifs de conception structurelle offrent différentes façons de créer une structure de Classe
(par exemple, en utilisant l’héritage et la composition pour créer un grand Objet
à partir de petits Objets
).
1. Modèle d’Adaptateur
Le motif de conception d’adaptateur est l’un des motifs de conception structurelle et est utilisé pour que deux interfaces non liées puissent fonctionner ensemble. L’objet qui relie ces interfaces non liées est appelé un adaptateur.
Note: En savoir plus sur le Modèle d’Adaptateur.
2. Modèle Composite
Le modèle composite est utilisé lorsque nous devons représenter une hiérarchie partie-ensemble. Lorsque nous devons créer une structure de telle sorte que les objets dans la structure doivent être traités de la même manière, nous pouvons appliquer le motif de conception composite.
Note: En savoir plus sur le Modèle Composite.
3. Modèle Proxy
Le modèle proxy fournit un espace réservé pour un autre Object
afin de contrôler l’accès à celui-ci. Ce modèle est utilisé lorsque nous voulons fournir un accès contrôlé à une fonctionnalité.
Note : En savoir plus sur le modèle Proxy.
4. Modèle de poids mouche
Le modèle de conception poids mouche est utilisé lorsque nous avons besoin de créer beaucoup d’Object
s d’une Classe
. Étant donné que chaque Object
consomme de l’espace mémoire qui peut être crucial pour les appareils à faible mémoire (comme les appareils mobiles ou les systèmes embarqués), le modèle de conception poids mouche peut être appliqué pour réduire la charge sur la mémoire en partageant les Object
s.
L’implémentation du pool de chaînes en Java est l’un des meilleurs exemples d’implémentation du modèle de poids mouche.
Note : En savoir plus sur le modèle de poids mouche.
5. Modèle de façade
Le modèle de façade est utilisé pour aider les applications clientes à interagir facilement avec le système.
Note: En savoir plus sur le modèle de façade.
6. Modèle de pont
Lorsque nous avons des hiérarchies d’interface à la fois dans les interfaces et dans les implémentations, le modèle de conception de pont est utilisé pour découpler les interfaces de l’implémentation et pour cacher les détails de l’implémentation des programmes clients. L’implémentation du modèle de conception de pont suit la notion de préférer la composition à l’héritage.
Note: En savoir plus sur le modèle de pont.
7. Modèle de décorateur
Le modèle de conception du décorateur est utilisé pour modifier la fonctionnalité d’un objet à l’exécution. En même temps, les autres instances de la même classe ne seront pas affectées par cela, de sorte que l’objet individuel obtient le comportement modifié. Le modèle de conception du décorateur est l’un des modèles de conception structurels (comme le modèle d’adaptateur, le modèle de pont ou le modèle composite) et utilise des classes abstraites ou une interface avec la composition pour implémenter. Nous utilisons l’héritage ou la composition pour étendre le comportement d’un objet, mais cela se fait à la compilation et s’applique à toutes les instances de la classe. Nous ne pouvons pas ajouter de nouvelles fonctionnalités pour supprimer un comportement existant à l’exécution – c’est là que le modèle de décorateur est utile.
Note: En savoir plus sur le modèle de conception du décorateur.
Modèles de conception comportementaux
Les modèles comportementaux fournissent une solution pour une meilleure interaction entre les objets et comment fournir un découplage lâche et une flexibilité pour une extension facile.
1. Modèle de méthode de modèle
Le modèle de patron de méthode est un motif de conception comportemental et est utilisé pour créer une ébauche de méthode et pour différer certaines des étapes de la mise en œuvre aux sous-classes. Le modèle de patron définit les étapes à exécuter dans un algorithme, et il peut fournir une implémentation par défaut qui pourrait être commune à toutes ou à certaines des sous-classes.
Note: En savoir plus sur le Modèle de patron de méthode.
2. Modèle Médiateur
Le modèle de conception médiateur est utilisé pour fournir un moyen de communication centralisé entre différents objets dans un système. Si les objets interagissent directement les uns avec les autres, les composants du système sont étroitement couplés les uns aux autres, ce qui rend le coût de maintenabilité plus élevé et moins flexible pour étendre facilement. Le modèle médiateur se concentre sur la fourniture d’un médiateur entre les objets pour la communication et la mise en œuvre d’un couplage lâche entre les objets. Le médiateur fonctionne comme un routeur entre les objets, et il peut avoir sa propre logique pour fournir un moyen de communication.
Note: En savoir plus sur le Modèle Médiateur
3. Modèle de chaîne de responsabilité
Le modèle de chaîne de responsabilité est utilisé pour réaliser un couplage lâche dans la conception logicielle où une demande du client est transmise à une chaîne d’objets pour les traiter. Ensuite, l’objet dans la chaîne décidera qui va traiter la demande et si la demande doit être envoyée ou non à l’objet suivant dans la chaîne.
Nous savons que nous pouvons avoir plusieurs blocs catch
dans un bloc try-catch
. Ici, chaque bloc catch
est une sorte de processeur pour traiter cette exception particulière. Ainsi, lorsqu’une exception se produit dans le bloc try
, elle est envoyée au premier bloc catch
pour traitement. Si le bloc catch
n’est pas en mesure de le traiter, il transmet la demande à l’objet suivant dans la chaîne (c’est-à-dire le prochain bloc catch
). Si même le dernier bloc catch
n’est pas en mesure de le traiter, l’exception est renvoyée en dehors de la chaîne au programme appelant.
Note: En savoir plus sur le modèle de chaîne de responsabilité.
4. Modèle Observateur
Le motif de conception observateur est utile lorsque vous êtes intéressé par l’état d’un Objet
et souhaitez être notifié à chaque changement. Dans le motif observateur, l’Objet
qui surveille l’état d’un autre Objet
est appelé observateur, et l’Objet
qui est observé est appelé sujet.
Java fournit une plateforme intégrée pour implémenter le motif observateur à travers la classe java.util.Observable
et l’interface java.util.Observer
. Cependant, il n’est pas largement utilisé car l’implémentation est limitée et la plupart du temps nous ne voulons pas finir par étendre une classe uniquement pour implémenter le motif observateur, car Java ne fournit pas d’héritage multiple dans les classes. Java Message Service (JMS) utilise le motif observateur ainsi que le motif médiateur pour permettre aux applications de s’abonner et de publier des données à d’autres applications.
Note: En savoir plus sur le Motif Observateur.
5. Motif Stratégie
Le motif stratégie est utilisé lorsque nous avons plusieurs algorithmes pour une tâche spécifique, et que le client décide de l’implémentation réelle à utiliser à l’exécution. Un motif stratégie est également connu sous le nom de motif de politique. Nous définissons plusieurs algorithmes et laissons les applications clientes passer l’algorithme à utiliser en tant que paramètre.
L’un des meilleurs exemples de ce modèle est la méthode Collections.sort()
qui prend le paramètre Comparator. En fonction des différentes implémentations des interfaces de comparaison, les objets sont triés de différentes manières.
Note: En savoir plus sur le Pattern Strategy.
6. Pattern de Commande
Le pattern de commande est utilisé pour mettre en œuvre un couplage lâche dans un modèle de requête-réponse. Dans ce pattern, la requête est envoyée à l’invocateur et l’invocateur la transmet à l’objet commande encapsulé. L’objet de commande transmet la requête à la méthode appropriée du récepteur pour effectuer l’action spécifique.
Note: En savoir plus sur le Pattern de Commande.
7. Pattern d’État
Le modèle d’état est utilisé lorsque un Objet
change son comportement en fonction de son état interne. Si nous devons changer le comportement d’un Objet
en fonction de son état, nous pouvons avoir une variable d’état dans l’Objet
et utiliser un bloc conditionnel if-else
pour effectuer différentes actions en fonction de l’état. Le modèle d’état est utilisé pour fournir une manière systématique et peu couplée d’atteindre cela grâce aux implémentations de contexte et d’état.
Note: En savoir plus sur le Modèle d’État.
8. Modèle de Visiteur
Le modèle de visiteur est utilisé lorsque nous devons effectuer une opération sur un groupe d’objets similaires. Avec l’aide d’un modèle de visiteur, nous pouvons déplacer la logique opérationnelle des objets vers une autre classe.
Note: En savoir plus sur le Modèle de Visiteur.
9. Modèle d’Interpréteur
Le modèle d’interpréteur est utilisé pour définir une représentation grammaticale d’un langage et fournit un interpréteur pour manipuler cette grammaire.
10. Pattern de l’itérateur
Le pattern de l’itérateur est l’un des patterns comportementaux et est utilisé pour fournir un moyen standard de traverser un groupe d’objets. Le pattern de l’itérateur est largement utilisé dans le cadre de collection Java où l’interface de l’itérateur fournit des méthodes pour parcourir une Collection
. Ce pattern est également utilisé pour fournir différents types d’itérateurs en fonction de nos besoins. Le pattern de l’itérateur cache la mise en œuvre réelle de la traversée de la Collection
et les programmes clients utilisent des méthodes d’itération.
Note: En savoir plus sur le pattern de l’itérateur.
11. Pattern du memento
Le pattern de conception memento est utilisé lorsque nous voulons sauvegarder l’état d’un objet afin de pouvoir le restaurer ultérieurement. Ce pattern est utilisé pour implémenter cela de telle manière que les données d’état sauvegardées de l’objet ne soient pas accessibles à l’extérieur de l’objet, ce qui protège l’intégrité des données d’état sauvegardées.
Le motif Memento est mis en œuvre avec deux Object
s – originator et caretaker. L’originator est l’Object
dont l’état doit être sauvegardé et restauré, et il utilise une classe interne pour sauvegarder l’état de Object
. La classe interne est appelée « Memento », et elle est private
afin qu’elle ne puisse pas être accédée depuis d’autres objets.
Modèles de conception divers
Il existe de nombreux modèles de conception qui ne relèvent pas des modèles de conception du Gang des Quatre. Examinons certains de ces modèles de conception populaires.
1. Modèle de conception DAO
Le modèle de conception de l’objet d’accès aux données (DAO) est utilisé pour découpler la logique de persistance des données dans une couche distincte. DAO est un modèle très populaire lorsque nous concevons des systèmes pour fonctionner avec des bases de données. L’idée est de maintenir la couche de service séparée de la couche d’accès aux données. De cette façon, nous mettons en œuvre la séparation de la logique dans notre application.
Remarque : En savoir plus sur le Modèle DAO.
2. Modèle d’injection de dépendances
Le modèle d’injection de dépendances nous permet de supprimer les dépendances codées en dur et de rendre notre application faiblement couplée, extensible et maintenable. Nous pouvons mettre en œuvre l’injection de dépendances en Java pour déplacer la résolution des dépendances de la compilation à l’exécution. Le framework Spring est construit sur le principe de l’injection de dépendances.
Note: En savoir plus sur le modèle d’injection de dépendances.
3. Modèle MVC
Le Modèle-Vue-Contrôleur (MVC) est l’un des plus anciens modèles architecturaux pour la création d’applications web.
Conclusion
Cet article a résumé les motifs de conception Java.
Vous pouvez consulter des exemples de code de motifs de conception Java depuis notre Dépôt GitHub.
Continuez votre apprentissage avec plus de tutoriels Java .
Source:
https://www.digitalocean.com/community/tutorials/java-design-patterns-example-tutorial