Où exactement le Singleton Pattern est-il utilisé dans une application réelle?

J’étais juste curieux de savoir exactement où le motif singleton est utilisé … Je sais comment fonctionne le motif et où il peut être utilisé, mais je n’ai jamais utilisé personnellement de véritable application. Quelqu’un peut-il donner un exemple où il peut être utilisé? J’apprécierais vraiment que quelqu’un puisse expliquer comment et où ils ont utilisé dans une application réelle. Merci Swati

Les singletons sont généralement utilisés pour la configuration globale. L’exemple le plus simple serait LogManager – il existe une LogManager.getLogManager() statique LogManager.getLogManager() et une seule instance globale est utilisée.

En fait, ce n’est pas un “vrai” singleton car vous pouvez dériver votre propre classe à partir de LogManager et créer ainsi des instances supplémentaires – mais il est généralement utilisé comme un singleton.

Un autre exemple serait java.lang.Runtime – des documents:

Chaque application Java possède une instance unique de classe Runtime qui permet à l’application d’interagir avec l’environnement dans lequel l’application s’exécute. Le runtime en cours peut être obtenu à partir de la méthode getRuntime.

C’est à peu près la définition d’un singleton 🙂

Maintenant, le pattern singleton est généralement mal vu – il introduit un couplage serré et rend les choses qui utilisent le singleton plus difficiles à tester, car vous ne pouvez pas facilement simuler ce composant. Si vous pouvez vous en passer, tant mieux. Injectez vos dépendances si possible à la place.

Quelques exemples:

  • Accès au matériel
  • Connexions à la firebase database
  • Fichiers de configuration

J’ai utilisé le modèle singleton dans un système de magasin de football en ligne. nous avons appliqué le modèle singleton à une classe ShoppingCart.

Vous n’avez besoin que d’une instance du panier pour une instance d’application. donc le singleton semblait être la meilleure solution pour cette situation.

Singleton est un joli motif de conception. Avant de décider du modèle, faites d’abord une parsing approfondie de votre problème et de la solution. Si dans votre solution, un object n’a qu’une seule instance et que vous souhaitez modéliser cela dans votre conception, vous devez utiliser le modèle singleton. Par exemple, si vous modélisez un PC dans le logiciel, il ne peut y avoir qu’une seule instance de PC par rapport à votre programme en cours. Comme Jon Skeet a déclaré que java.lang.Runtime est modélisé comme un singleton, car pour tous les objects java chargés et exécutés dans un environnement d’exécution java, il n’existe qu’une seule instance d’exécution.

Encore une fois, beaucoup de fois, il est utilisé pour de mauvaises raisons. Ne créez jamais un singleton pour pouvoir accéder facilement à l’object (comme Object :: instance ()) de n’importe où sans faire passer l’object. C’est la pire utilisation que j’ai jamais vue.

Par exemple, exécuter une version d’évaluation d’un logiciel avec une licence et une connexion à une firebase database, qui utilise un modèle singleton dans un mot réel. peut être le guru jon skeet peut fournir des exemples comme celui-ci.

Singleton Pattern peut être utilisé pour charger la configuration, par exemple dans une application Web, nous sums supposés générer un fichier qui doit être stocké quelque part dans le serveur. Désormais, cet emplacement peut être extrait d’un fichier de configuration (fichier de propriétés) à l’aide d’un singleton class.sormant qu’il doit être unique et qu’il peut changer fréquemment à l’avenir, nous utilisons un fichier de configuration de manière à pouvoir être modifié sans déployer l’application. pour refléter les changements et l’emplacement sera global et unique à travers l’application

Singleton pattern est généralement utile lorsque l’object créé une fois et partagé entre différents threads / applications. Considérez le cas où vous implémentez la classe de chargement des propriétés pour une imprimante.

Maintenant, les imprimantes peuvent avoir des propriétés variables. Par exemple: – Mono Printer, Color Printer, Printer Scanner Support Printer, etc.

A chaque démarrage, ce fichier de configuration doit être chargé pour activer quelques boutons / applications sur l’onglet de l’interface utilisateur ou sur une interface utilisateur de l’imprimante.

La valeur des fonctionnalités sockets en charge est stockée sous la forme d’un tableau de configuration, par exemple 1 si la fonctionnalité est prise en charge et 0 si elle n’est pas prise en charge.

Sur la base des fonctionnalités sockets en charge, nous activons la désactivation de certaines fonctionnalités et applications sur l’interface utilisateur. Maintenant, cet emplacement de fichier de configuration dans le cas d’imprimantes fabriquées par une seule entreprise est toujours stocké sur un chemin fixe.

Les valeurs de fichier changeraient / seraient lues uniquement dans les scénarios suivants: – 1. Au démarrage. 2. sur Ajout ou suppression de tout nouveau périphérique matériel.

Nous pouvons utiliser une classe singleton pour implémenter la lecture des fichiers de configuration. En tant que valeurs identiques, la configuration ne change pas lors de l’intervention de l’interface utilisateur et peut être modifiée uniquement lors d’une intervention sur le matériel.

C’est un exemple auquel je peux penser où nous pouvons implémenter un modèle de conception Singleton.

Lorsque vous utilisez Logger, vous utilisez le modèle Singleton pour la classe Logger. Si ce n’est pas Singleton, chaque client aura son propre object Logger et il y aura un access simultané sur l’instance Logger dans un environnement multithread, et plusieurs clients créeront / écrivent simultanément dans le fichier journal, ce qui entraînera une corruption des données.

Considérez la situation de AudioDriverService qui est conçu dans Singleton Pattern. Nous sums donc autorisés à créer une seule instance de la classe AudioDriverService . Désormais, votre lecteur Windows Media ou Youtube Player partagera le même object d’ AudioDriverService plutôt que de créer une nouvelle instance.

J’ai utilisé un singleton (en fait quelques-uns) dans une application utilisant pureMVC. Nous étions mécontents de la complexité introduite par ce cadre (il est devenu compliqué et hiérarchisé de suivre les appels de méthodes via les couches mvc). Nous avons donc utilisé un singleton central comme médiateur pour mieux séparer les couches les unes des autres.

J’utilise un lecteur multimédia dans mon application Android, donc j’étend la classe mediaplayer et utilise le modèle singleton, car je n’ai besoin que d’une instance et je peux appeler la même instance dans toute autre partie de mon application pour vérifier si elle est en cours de lecture, ou quel fichier est en cours de lecture.

J’espère que ça vous aide, salut !!!!

La classe Singleton est fondamentalement utilisée lorsque vous ne devez autoriser qu’une seule instanciation de la classe. Prenant exemple sur le monde réel, dans le cas de la conception OOP d’une bibliothèque, nous pouvons créer une classe de bibliothèque en tant que classe singleton.