QCM - Patrons de conception
1. Quel patron de conception devez-vous utiliser ?
1.1. Lorsque un système doit être configuré avec une famille de produits parmi plusieurs.
-
Monteur
-
Fabrique abstraite
-
Méthode fabrique
-
Composite
Solution
Fabrique abstraite
Le patron de conception Fabrique abstraite doit être utilisé lorsqu’un système doit être configuré avec une ou plusieurs familles de produits. Ce modèle fournit une interface permettant de créer des familles d’objets apparentés ou dépendants sans spécifier leurs classes concrètes. Il permet au code client de créer des objets de types différents appartenant à la même famille, en garantissant que les objets créés sont compatibles et fonctionnent ensemble de manière transparente.
1.2. Lorsque vous souhaitez utiliser une classe existante dont l’interface ne correspond pas à celle dont vous avez besoin.
-
Adaptateur
-
Décorateur
-
Mediateur
-
Proxy
Solution
Adaptateur
Le patron de conception "Adaptateur" doit être utilisé lorsque l’on souhaite utiliser une classe existante, mais que son interface ne correspond pas à celle dont vous avez besoin. Le patron Adaptateur vous permet de créer une nouvelle classe qui sert de pont entre la classe existante et l’interface souhaitée. Cette nouvelle classe, appelée adaptateur, convertit l’interface de la classe existante en l’interface attendue par le client. En utilisant le patron Adaptateur, vous pouvez réutiliser des classes existantes sans modifier leur code, ce qui favorise la réutilisation et la flexibilité du code.
1.3. Lorsque vous souhaitez éviter un lien permanent entre une abstraction et son implémentation.
Cela peut être le cas, par exemple, lorsque l’implémentation doit être sélectionnée ou changée au moment de l’exécution.
-
Fabrique abstraite
-
Stratégie
-
Pont
-
Méthode Template
Solution
Pont
Le patron de conception Pont doit être utilisé lorsque vous souhaitez éviter un lien permanent entre une abstraction et son implémentation. Cela est utile lorsque l’implémentation doit être sélectionnée ou changée au moment de l’exécution. Le patron de conception Pont permet à l’abstraction et à l’implémentation de varier indépendamment, ce qui permet plus de flexibilité et d’extensibilité dans le code.
Il sépare l’abstraction de son implémentation en créant un pont entre les deux, ce qui leur permet d’évoluer indépendamment. Ce patron favorise un couplage lâche et facilite la maintenance et la modification du code.
1.4. Lorsque le processus de construction doit permettre différentes représentations de l’objet construit.
-
Singleton
-
Composite
-
Décorateur
-
Monteur
Solution
Monteur
Le patron de conception Monteur doit être utilisé lorsque le processus de construction doit permettre différentes représentations de l’objet construit. Le patron Monteur sépare la construction d’un objet de sa représentation, ce qui permet au même processus de construction de créer différentes représentations.
Ce patron est utile lorsqu’il existe plusieurs façons de construire un objet et que le processus de construction doit être flexible et indépendant de la représentation finale.
1.5. Lorsque plusieurs objets peuvent traiter une demande et le gestionnaire n’est pas connu a priori. Le gestionnaire doit être déterminé automatiquement.
-
Observateur
-
Chaine de responsabilité
-
Décorateur
-
Prototype
Solution
Chaîne de responsabilités
Le patron de conception de la chaîne de responsabilité doit être utilisé dans une situation où plusieurs objets peuvent traiter une demande et où le gestionnaire n’est pas connu à l’avance.
Ce patron permet à plusieurs objets d’avoir une chance de traiter la demande, chaque objet de la chaîne ayant la possibilité de transmettre la demande à l’objet suivant de la chaîne.
Le gestionnaire est déterminé automatiquement au fur et à mesure que la demande traverse la chaîne jusqu’à ce qu’elle soit traitée ou qu’elle atteigne la fin de la chaîne.
1.6. Lorsque vous souhaitez paramétrer les objets par une action à effectuer.
-
Commande
-
Prototype
-
Stratégie
-
Monteur
Solution
Commande
Le patron de conception Commande doit être utilisé lorsque vous souhaitez paramétrer des objets par une action à effectuer.
Ce patron dissocie l’émetteur d’une requête du récepteur, ce qui permet à plusieurs requêtes d’être traitées par différents récepteurs. Le patron de commande encapsule une requête sous forme d’objet, qui peut être passé en tant que paramètre, stocké et exécuté à un moment ultérieur.
Cela permet une flexibilité et une extensibilité dans le traitement de différentes actions ou opérations.
1.7. Lorsque vous souhaitez représenter des hiérarchies d’objets en partie ou en totalité.
-
Composite
-
Itérateur
-
Fabrique abstraite
-
Poids mouche
Solution
Composite
Le patron de conception composite doit être utilisé lorsque vous souhaitez représenter des hiérarchies d’objets en partie ou en totalité. Ce patron vous permet de traiter des objets individuels et des groupes d’objets de manière uniforme, en créant une structure arborescente où les objets individuels et les groupes d’objets peuvent être traités comme un seul objet.
Ce patron est utile lorsque vous devez travailler avec des structures complexes qui peuvent être composées de parties plus petites et que vous souhaitez pouvoir effectuer des opérations à la fois sur les parties individuelles et sur l’ensemble de la structure.
1.8. Lorsque vous souhaitez ajouter des compétences à des objets individuels de manière dynamique et transparente, c’est-à-dire sans affecter d’autres objets.
-
Visiteur
-
Proxy
-
Décorateur
-
Memento
Solution
Le patron de conception Décorateur doit être utilisé lorsque vous souhaitez ajouter des responsabilités à des objets individuels de manière dynamique et transparente, sans affecter les autres objets.
Le patron Décorateur vous permet d’ajouter de nouveaux comportements ou fonctionnalités à un objet en l’enveloppant d’une classe Décorateur. De cette manière, vous pouvez ajouter ou supprimer des responsabilités d’un objet au moment de l’exécution, sans modifier sa structure ni affecter les autres objets qui l’utilisent.
1.9. Lorsque vous souhaitez fournir une interface simple à un sous-système complexe.
-
Adaptateur
-
Façade
-
Fabrique abstraite
-
Composite
Solution
Façade
Le patron de conception Façade doit être utilisé lorsque vous souhaitez fournir une interface simple à un sous-système complexe. Ce patron fournit une interface unifiée qui masque les complexités d’un sous-système et permet aux clients d’interagir avec lui de manière simplifiée.
En utilisant le patron Façade, les clients peuvent accéder au sous-système par le biais d’une interface unique, ce qui facilite son utilisation et sa compréhension.
1.10. Lorsqu’une classe souhaite que ses sous-classes spécifient les objets qu’elle crée.
-
Pont
-
Stratégie
-
Monteur
-
Méthode Fabrique
Solution
Méthode fabrique
Le patron de conception Méthode Fabrique doit être utilisé lorsqu’une classe souhaite que ses sous-classes spécifient les objets qu’elle crée. Ce patron permet à une classe de différer l’instanciation d’un objet à ses sous-classes, leur permettant de décider de la classe concrète à instancier.
Cela favorise un couplage lâche entre la classe créatrice et les objets qu’elle crée, puisque la classe créatrice ne dépend que d’une interface abstraite ou d’une classe de base.
1.11. Lorsqu’une application utilise un grand nombre d’objets et les coûts de stockage sont élevés en raison de la quantité d’objets.
-
Interpreter
-
Prototype
-
Poids mouche
-
Décorateur
Solution
Poids mouche
Lorsqu’une application utilise un grand nombre d’objets et que les coûts de stockage sont élevés en raison de la quantité d’objets, il convient d’utiliser le patron de conception Poids mouche. Le patron Poids mouche vise à minimiser l’utilisation de la mémoire en partageant les données communes entre plusieurs objets.
Il y parvient en séparant l’État intrinsèque (partagé entre les objets) de l’État extrinsèque (propre à chaque objet). Ce faisant, le patron Poids mouche réduit l’empreinte mémoire de l’application et améliore les performances.
1.12. Lorsqu’il existe un langage à interpréter, et vous pouvez représenter les énoncés du langage sous forme d’arbres syntaxiques abstraits.
-
Interpreter
-
Singleton
-
Façade
-
Composite
Solution
Interpréteur
Le patron de conception Interpreter est utilisé lorsqu’il existe un langage à interpréter et que vous pouvez représenter les éléments du langage sous forme d’arbres syntaxiques abstraits.
Ce patron permet de définir une grammaire pour le langage et fournit un moyen d’évaluer ou d’interpréter les éléments du langage. Il sépare l’analyse des éléments du langage de leur exécution, ce qui facilite l’ajout de nouvelles expressions ou la modification de la grammaire du langage.
1.13. Lorsque vous souhaitez accéder au contenu d’un objet agrégé sans exposer sa représentation interne.
-
Itérateur
-
Composite
-
Proxy
-
Pont
Solution
Itérateur
Le patron de conception Itérateur doit être utilisé lorsque vous souhaitez accéder au contenu d’un objet agrégé sans exposer sa représentation interne. Ce patron permet d’accéder aux éléments d’un objet agrégé de manière séquentielle sans exposer la structure sous-jacente de l’objet.
Il dissocie le client des détails de l’implémentation de l’objet agrégé, ce qui permet de parcourir et de manipuler facilement la collection.
1.14. Lorsqu’un ensemble d’objets communiquent selon des modalités bien définies mais complexes. Les interdépendances qui en résultent ne sont pas structurées et sont difficiles à comprendre.
-
Façade
-
Méthode Fabrique
-
Template Method
-
Médiateur
Solution
Médiateur
Le patron de conception du médiateur doit être utilisé lorsqu’un ensemble d’objets communiquent de manière bien définie mais complexe, et que les interdépendances qui en résultent ne sont pas structurées et sont difficiles à comprendre.
Le patron du médiateur favorise le couplage lâche en encapsulant la logique de communication entre les objets dans un objet médiateur. Cela permet aux objets d’interagir entre eux indirectement par l’intermédiaire du médiateur, ce qui réduit les dépendances directes entre eux et rend le système plus facile à maintenir et à comprendre.
1.15. Lorsqu’un instantané (une partie) de l’État d’un objet doit être sauvegardé afin qu’il puisse être restauré à cet État ultérieurement, et une interface directe permettant d’obtenir l’État exposerait les détails de l’implémentation et romprait l’encapsulation de l’objet.
-
État
-
Memento
-
Commande
-
Observateur
Solution
Memento
Le patron de conception Memento devrait être utilisé dans ce scénario. Le patron Memento permet de sauvegarder et de restaurer l’état d’un objet sans exposer les détails de son implémentation ni rompre l’encapsulation. Il permet de capturer l’état interne d’un objet et de le stocker à l’extérieur, de sorte qu’il puisse être restauré ultérieurement si nécessaire.
Ce patron est utile lorsqu’il est nécessaire de sauvegarder et de restaurer l’état d’un objet, tout en gardant ses détails d’implémentation cachés.
1.16. Lorsqu’un objet doit être en mesure de notifier d’autres objets sans faire d’hypothèses sur l’identité de ces objets. En d’autres termes, ces objets ne doivent pas être étroitement couplés.
-
Visiteur
-
Adaptateur
-
Observateur
-
Chaine de responsabilité
Solution
Observateur
Le patron de conception Observateur doit être utilisé lorsqu’un objet doit notifier d’autres objets sans faire de suppositions sur l’identité de ces objets. Ce patron permet un couplage lâche entre les objets, car l’objet notifiant n’a pas besoin d’avoir une connaissance directe des objets récepteurs.
Au lieu de cela, l’objet notifiant tient à jour une liste d’observateurs et les informe lorsqu’un événement spécifique se produit. Cela permet au système d’être flexible et extensible, car de nouveaux observateurs peuvent être facilement ajoutés sans modifier l’objet de notification.
1.17. Lorsqu’un système doit être indépendant de la manière dont ses produits sont créés, composés et représentés, et lorsque les classes à instancier sont spécifiées au moment de l’exécution, par exemple par chargement dynamique.
-
Prototype
-
Façade
-
Fabrique abstraite
-
Poids mouche
Solution
Prototype
Le patron de conception Prototype doit être utilisé lorsqu’un système doit être indépendant de la manière dont ses produits sont créés, composés et représentés. Il permet de créer des objets en clonant des objets existants, plutôt que de s’appuyer sur une instanciation explicite.
Ce patron est également utile lorsque les classes à instancier sont spécifiées au moment de l’exécution, par exemple par chargement dynamique.
1.18. Lorsqu’il est nécessaire de disposer d’une référence à un objet plus polyvalente ou plus sophistiquée qu’un simple pointeur et d’envelopper un objet pour en contrôler l’accès.
-
Itérateur
-
Singleton
-
Stratégie
-
Proxy
Solution
Proxy
Le patron de conception Proxy est utilisé lorsqu’il est nécessaire de disposer d’une référence à un objet plus polyvalente ou plus sophistiquée qu’un simple pointeur. Il enveloppe un objet pour en contrôler l’accès, agissant comme un intermédiaire entre le client et l’objet. Le patron Proxy peut être utilisé pour ajouter des fonctionnalités supplémentaires à l’objet, telles que la fourniture d’un niveau de sécurité ou la mise en cache.
Il permet la mise en œuvre du chargement paresseux, où l’objet réel n’est créé que lorsqu’il est nécessaire.
1.19. Lorsqu’il doit y avoir exactement une instance d’une classe et celle-ci doit être accessible aux clients à partir d’un point d’accès bien connu.
-
Pont
-
Singleton
-
Prototype
-
Méthode Fabrique
Solution
Singleton
Le patron de conception Singleton doit être utilisé lorsqu’il ne doit y avoir qu’une seule instance d’une classe et qu’elle doit être accessible aux clients à partir d’un point d’accès bien connu. Ce patron garantit qu’une seule instance de la classe est créée et fournit un point d’accès global à celle-ci.
Il est couramment utilisé dans les scénarios où il ne doit y avoir qu’une seule instance d’une connexion de base de données, d’un enregistreur ou d’un gestionnaire de configuration, par exemple.
1.20. Lorsque le comportement d’un objet dépend de son État, et il doit changer de comportement à l’exécution en fonction de cet État.
-
Médiateur
-
Décorateur
-
État
-
Observateur
Solution
État
Le patron de conception État doit être utilisé lorsque le comportement d’un objet dépend de son État et qu’il doit modifier son comportement au moment de l’exécution en fonction de cet État. Ce patron permet à un objet de modifier son comportement en changeant son État interne, sans changer de classe. Il encapsule les différents États dans des classes distinctes et permet à l’objet de déléguer le comportement à la classe de l’État actuel.
Cela favorise la flexibilité et la maintenabilité en séparant la logique du comportement de la classe de l’objet et en facilitant l’ajout ou la modification d’États à l’avenir.
1.21. Lorsque de nombreuses classes apparentées ne diffèrent que par leur comportement ou vous avez besoin de différentes variantes d’un algorithme. Par exemple, vous pouvez définir des algorithmes reflétant différents compromis espace/temps.
-
Composite
-
Méthode Fabrique
-
Proxy
-
Stratégie
Solution
Stratégie
Le patron de conception Stratégie doit être utilisé lorsqu’il existe de nombreuses classes apparentées qui ne diffèrent que par leur comportement ou lorsque différentes variantes d’un algorithme sont nécessaires. Ce patron permet de définir différents algorithmes reflétant différents compromis espace/temps.
En encapsulant chaque algorithme dans une classe distincte et en permettant au client de choisir l’algorithme souhaité de manière dynamique, le patron Stratégie favorise la flexibilité et la maintenabilité de la base de code.
1.22. Lorsque pour contrôler les extensions des sous-classes. Vous pouvez définir une méthode modèle qui appelle des opérations de "crochet" à des points spécifiques, autorisant ainsi les extensions uniquement à ces points.
-
État
-
Stratégie
-
Template Method
-
Méthode Fabrique
Solution
Méthode template
Le patron de conception des méthode template doit être utilisé lorsque vous souhaitez contrôler les extensions des sous-classes. Ce patron vous permet de définir une méthode modèle qui appelle des opérations "crochet" à des points spécifiques, ce qui signifie que les sous-classes ne peuvent étendre la fonctionnalité de la méthode modèle qu’à ces points spécifiques.
Cela permet d’avoir une structure ou un algorithme commun dans la classe de base, tout en permettant aux sous-classes de fournir leurs propres implémentations pour certaines étapes de l’algorithme.
1.23. une structure d’objets contient de nombreuses classes d’objets avec des interfaces différentes, et vous souhaitez effectuer des opérations sur ces objets qui dépendent de leurs classes concrètes.
-
Façade
-
Adaptateur
-
Visiteur
-
Décorateur
Solution
Visiteur
Le patron de conception Visiteur devrait être utilisé dans ce scénario. Le patron Visiteur vous permet de définir de nouvelles opérations sur un groupe de classes sans modifier leurs implémentations individuelles.
Il est utile lorsque vous avez une structure d’objets complexe avec de nombreuses classes qui ont des interfaces différentes, et que vous voulez effectuer des opérations sur ces objets qui dépendent de leurs classes concrètes.
En utilisant le patron Visiteur, vous pouvez séparer l’algorithme des objets sur lesquels il opère, ce qui permet d’obtenir un code plus souple et plus facile à maintenir.