Pour vous aider à répondre, voici un complément d'information sur le commentaire anti-modèle :
elle est surutilisée, introduit des restrictions inutiles dans des situations où une seule instance d'une classe n'est pas réellement nécessaire, et introduit un état global dans une application
De : http://en.wikipedia.org/wiki/Singleton_pattern
Pour en savoir plus, vous pouvez consulter le site : https://www.michaelsafyan.com/tech/design/patterns/singleton
Voici une excellente conclusion au blog ci-dessus :
En bref, le modèle singleton rend le code plus complexe, moins utile, et une vraie douleur à réutiliser ou à tester. Éliminer les singletons peut être délicat, mais c'est un effort qui en vaut la peine.
OK, donc, la raison pour laquelle il s'agit d'un anti-modèle est bien décrite dans ce paragraphe, et, comme l'exprime l'auteur, cela couple étroitement votre code au singleton.
Si vous voulez utiliser un singleton, vous pouvez réfléchir à votre conception, mais il y a des moments où il est utile.
Par exemple, une fois, j'ai dû écrire une application qui pouvait avoir au maximum une connexion à une base de données, pour traiter des milliers de demandes. Un singleton est donc logique puisque je suis contraint par les ressources à n'avoir qu'une seule instance.
Mais, généralement, cela est utilisé pour simplifier le code, sans penser aux difficultés qui seront introduites.
Par exemple, et cela s'applique également aux classes statiques, si vous effectuez des tests unitaires, ou si vous avez de la concurrence, alors l'état d'une requête changera l'état et cela peut causer des problèmes, car la classe qui appelle l'instance peut supposer que l'état est celui qu'elle attendait.
Je pense que la meilleure façon de contester l'utilisation est de réfléchir à la façon de le gérer si votre programme est multithreadé, et une façon simple de le faire est de le tester en unité, si vous avez plusieurs tests qui s'exécutent en même temps.
Si vous constatez que vous en avez encore besoin, alors utilisez-la, mais prenez conscience des problèmes que vous rencontrerez plus tard.