Sim Studio Chat

c'est quoi design pattern singleton

Statut: idle

Vous

c'est quoi le design pattern singleton

Assistant

🎯 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émentExplication
Constructeur privéEmpêche new Imprimante()
Variable static finalUne seule instance pour toute l'application
Méthode getInstance()Point d'accès global unique
Thread-safePas 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.