Les patrons de création
Les cinq patrons de création du catalogue GoF : Singleton, Fabrique, Fabrique abstraite, Monteur et Prototype. Leur intention, leurs participants, un exemple de code et leurs limites.
- 25 cartes
- 4 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Comprendre
Quelques cartes du deck
Singleton : de quoi s'agit-il ?
Voir la réponse
Patron de création qui garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès global à celle-ci.
Le constructeur est privé et la classe garde son unique instance dans un attribut statique. Le point d'accès global est aussi son défaut : il cache une dépendance et gêne les tests.
Ce Singleton laisse créer deux instances, même dans un programme sans concurrence. Pourquoi ?
```java
public class Config {
private static Config instance;
public Config() { }
public static Config getInstance() {
if (instance == null) {
instance = new Config();
}
return instance;
}
}`- Le constructeur est public :
new Config()crée un second exemplaire - L'attribut
instanceeststatic: il est réécrit à chaque appel degetInstance getInstanceest statique : chaque classe appelante obtient sa propre copie- La condition
instance == nullcrée un objet à chaque appel
Voir la réponse
Le constructeur est public :
new Config()crée un second exemplaireRien n'empêche un autre code d'appeler le constructeur public : l'unicité n'est plus garantie. Il faut le déclarer
private. L'attribut statique n'existe qu'en un exemplaire pour toute la classe,getInstancestatique renvoie ce même objet à tous les appelants, et la condition ne crée l'objet qu'au premier appel.- Le constructeur est public :
Pour qu'une classe ne puisse avoir qu'une seule instance, son constructeur est … et elle garde l'instance dans un attribut ….
Voir la réponse
Pour qu'une classe ne puisse avoir qu'une seule instance, son constructeur est privé et elle garde l'instance dans un attribut statique.
Avec un constructeur public, n'importe quel code ferait
newet créerait un second exemplaire : la garantie d'unicité tomberait.Fabrique (Factory Method) : de quoi s'agit-il ?
Voir la réponse
Patron de création qui définit une méthode de création dans une classe mère et laisse les classes filles décider quelle classe concrète instancier.
Le code du créateur appelle la méthode de fabrication et ne connaît que le type du produit, jamais sa classe concrète. Ajouter un produit revient à ajouter une classe fille.
Avec une Fabrique abstraite, pourquoi l'application ne peut-elle pas afficher un bouton clair à côté d'un menu sombre ?
- Chaque widget vérifie à sa création le thème des widgets déjà créés
- Tous ses widgets viennent de la même fabrique concrète, choisie une seule fois
- Les widgets clairs et sombres héritent d'une même classe concrète
- Le client teste le thème courant avant chaque appel à
new
Voir la réponse
Tous ses widgets viennent de la même fabrique concrète, choisie une seule fois
Le client ne fait jamais
newsur un widget : il demandecreerBouton()etcreerMenu()à une seule fabrique, claire ou sombre. La cohérence de la famille tient à ce choix unique, pas à des vérifications dispersées.