Le paramètre qui traverse tout
Un Singleton n'est pas un raccourci pour éviter des paramètres. Il impose une règle : cette ressource ne peut avoir qu'une instance.
Ici, un même ConnectionManager traverse SupportApp puis Dashboard. Ces deux classes ne l'utilisent pas. Seul le bouton final en a besoin.
Un second bouton contourne la chaîne avec new ConnectionManager(). Il écrit alors dans un autre journal. Le rapport principal oublie son événement.
Ce que le diff échange
Imposer une instance unique
Trois éléments forment la recette enseignée. Les trois sont nécessaires.
Créer l'instance dans la classe
Le champprivate static final INSTANCEcontient la référence partagée.Fermer le constructeur
Le constructeurprivateinterdit toutnew ConnectionManager()depuis une autre classe.Exposer un point d'accès
getInstance()retourne toujours la même référence.
Le piège classique
getInstance() sans rendre le constructeur privé ne garantit pas l'unicité. Un appelant peut encore créer une seconde instance.Identité et état partagé
Deux variables peuvent désigner le même objet. Avec ==, vous vérifiez ici leur identité, pas seulement l'égalité de leur contenu.
La mutation faite avec first est visible avec second, car il n'existe qu'un seul journal en mémoire. C'est utile pour une vraie ressource centrale. C'est aussi la source du danger : une modification locale peut affecter tout le programme.
Le compromis à défendre
Bon cas
- • La ressource est unique par nature.
- • Une configuration partagée reste surtout lue.
- • Dupliquer la ressource produirait un état incohérent.
Mauvais cas
- • Le partage est seulement plus pratique à court terme.
- • Beaucoup de code modifie l'état global.
- • Les tests doivent remplacer facilement la dépendance.
| Choix | Force | Coût |
|---|---|---|
| Objet transmis explicitement | La dépendance reste visible dans les signatures. | Le paramètre peut traverser des classes qui ne l'utilisent pas. |
| Singleton | Une seule instance et un accès central. | Dépendance cachée, couplage et tests plus difficiles. |
Quand ne pas l'utiliser
Vérifiez vos réflexes
Vérifiez vos réflexes
Une réponse par question. La correction apparaît tout de suite.