c'est quoi le design pattern singleton
c'est quoi design pattern singleton
Statut: idle
🎯 Le Pattern Singleton (Version Corrigée)
📖 1) Définition simple
Le Singleton est un pattern de conception qui garantit qu'une classe n'a qu'une seule instance dans tout le programme, avec un point d'accès global via getInstance().
Principe clé : Le constructeur est privé pour bloquer toute instanciation externe avec new.
🎯 2) Pourquoi c'est utile dans ce cours
Ce que tu vas apprendre :
- ✅ Contrôler l'instanciation d'une classe (constructeur privé)
- ✅ Comprendre les problèmes de concurrence en multithreading
- ✅ Reconnaître les cas d'usage légitimes :
- Connexion à une base de données
- Gestionnaire de configuration
- Logger système
⚠️ Attention importante :
Leur utilisation est généralement bannie en programmation moderne !
Les Singletons sont souvent considérés comme des variables globales déguisées et créent des dépendances cachées. À éviter intensivement dans du code professionnel.
💡 3) Exemple mémorable - VERSION THREAD-SAFE
🖨️ Métaphore : L'imprimante du bureau
Imagine une imprimante unique dans un bureau. Peu importe combien d'employés veulent imprimer, ils utilisent tous la même machine.
public final class Imprimante {
// Instance créée au chargement de la classe (eager initialization)
private static final Imprimante INSTANCE = new Imprimante();
// Constructeur privé : impossible de faire "new Imprimante()"
private Imprimante() {
System.out.println("🖨️ Imprimante initialisée !");
}
// Point d'accès global
public static Imprimante getInstance() {
return INSTANCE;
}
public void imprimer(String document) {
System.out.println("📄 Impression : " + document);
}
}
📝 Utilisation :
// Tous les employés obtiennent la MÊME imprimante
Imprimante imp1 = Imprimante.getInstance();
Imprimante imp2 = Imprimante.getInstance();
System.out.println(imp1 == imp2); // true ✅
imp1.imprimer("Rapport.pdf");
// 📄 Impression : Rapport.pdf
🔒 4) Pourquoi cette version est thread-safe ?
Cette implémentation utilise l'eager initialization :
- ✅ L'instance est créée au chargement de la classe par la JVM
- ✅ La JVM garantit la synchronisation lors du chargement des classes
- ✅ Aucun risque de créer plusieurs instances, même avec plusieurs threads
📚 5) Points clés à retenir
| Élément | Explication |
|---|---|
| Constructeur privé | Empêche new Imprimante() |
| Variable static final | Une seule instance pour toute l'application |
| Méthode getInstance() | Point d'accès global unique |
| Thread-safe | Pas de problème de concurrence |
⚠️ 6) Quand NE PAS utiliser un Singleton
- ❌ Quand tu peux passer l'objet en paramètre
- ❌ Pour stocker des données globales (utilise plutôt l'injection de dépendances)
- ❌ Dans les tests unitaires (difficile à mocker)
- ❌ Quand plusieurs instances pourraient être utiles plus tard
🎓 Conseil final : Comprends le Singleton pour les examens et la culture générale, mais privilégie l'injection de dépendances dans tes projets réels !
Entrée pour envoyer, Shift + Entrée pour un saut de ligne.