web-dev-qa-db-fra.com

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

J'étais juste curieux de savoir exactement où le motif singleton est utilisé .... Je sais comment le motif fonctionne et où il peut être utilisé, mais personnellement, je ne l'ai jamais utilisé dans une application réelle. peut être utilisé ... Je voudrais vraiment savoir si quelqu'un peut expliquer comment et où il a été utilisé dans une application réelle ... Merci., Swati

39
swati

Généralement, les singletons sont utilisés pour la configuration globale. L'exemple le plus simple serait LogManager - il existe une méthode 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 de LogManager et créer ainsi des instances supplémentaires - mais c'est généralement used en tant que singleton.

Un autre exemple serait Java.lang.Runtime - à partir de la documentation:

Chaque application Java a un seul instance de la classe Runtime qui permet l'application d'interface avec le environnement dans lequel l'application est en cours d'exécution. Le runtime actuel peut être obtenu à partir de la méthode getRuntime.

C'est à peu près la définition d'un singleton :)

Maintenant, le motif singleton est la plupart du temps désapprouvé - il introduit un couplage étroit et rend plus difficiles les tests utilisant le singleton, car vous ne pouvez pas facilement vous moquer de ce composant. Si vous pouvez vous en passer, tant mieux. Injectez vos dépendances si possible à la place.

56
Jon Skeet

Quelques exemples:

  • Accès matériel
  • Connexions de base de données
  • Fichiers de configuration
11
Florian

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

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

11
Manaf Abu.Rous

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 objet Logger et il y aura un accès 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. 

2
Arun Raaj

Considérez la situation de AudioDriverService qui est conçue dans Singleton Pattern. Nous sommes donc autorisés à créer une seule instance de AudioDriverService class. Désormais, votre lecteur Windows Media ou votre lecteur Youtube partageront le même objet de AudioDriverService plutôt que de créer une nouvelle instance.

2
Mr. D

Par exemple, l'exécution d'une version d'évaluation d'un logiciel avec une licence et une connexion à une base de données, qui utilise un modèle singleton dans Word peut être le gourou jon skeet peut fournir un exemple comme celui-ci.

2
Dead Programmer

Singleton est un modèle de conception agréable. Avant de décider du modèle, effectuez d'abord une analyse approfondie de votre problème et de la solution. Si, dans votre solution, un objet ne contient qu'une seule instance et que vous souhaitez modéliser cela dans votre conception, vous devez utiliser un modèle singleton. Par exemple, si vous modélisez un PC dans le logiciel, il ne peut y avoir qu’une seule instance d’un PC en ce qui concerne votre programme en cours d’exécution. Comme Jon Skeet a déclaré que Java.lang.Runtime est modélisé comme un singleton, car pour tous les objets 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, il est souvent utilisé pour les mauvaises raisons. Ne créez jamais un singleton pour pouvoir accéder facilement à l'objet (comme Object :: instance ()) de n'importe où sans passer de l'objet. C'est la pire utilisation que j'ai jamais vue.

2
ferosekhanj

Le motif singleton est généralement utile lorsque l’objet créé une seule fois et partagé par plusieurs threads/applications. Considérons le cas où vous implémentez la classe de chargement des propriétés pour une imprimante.

Les imprimantes peuvent maintenant avoir des propriétés de variantes. Pour, par exemple: - Imprimante mono, Imprimante couleur, Scanner automatique pris en charge Imprimante et ainsi de suite ...

À chaque démarrage, ce fichier de configuration doit être chargé pour activer quelques boutons/applications Dans l’onglet de l’interface utilisateur ou dans toute interface utilisateur de l’imprimante.

Les valeurs des fonctionnalités prises en charge sont stockées 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 prises 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 en lecture seule dans les scénarios suivants: - 1. Au démarrage . 2. sur l’ajout ou la suppression de tout nouveau périphérique matériel.

Nous pouvons utiliser une classe singleton pour implémenter la lecture de fichiers de configuration. Comme les mêmes valeurs I.e. la configuration ne change pas sur l'intervention de l'interface utilisateur et ne peut être modifiée que sur l'intervention du matériel.

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

1
netblogger

Singleton Pattern peut être utilisé pour charger la configuration, par exemple dans une application Web, nous sommes supposés générer un fichier qui doit être stocké quelque part sur le serveur. Maintenant, cet emplacement peut être extrait d'un fichier de configuration (fichier de propriétés) à l'aide d'un singleton class.sormant que l'emplacement doit être unique et qu'il peut changer fréquemment, nous utilisons un fichier de configuration de sorte pour refléter les changements et l'emplacement sera global et unique à travers l'application

1
Akhil Gupta

J'utilise un lecteur multimédia dans mon application Android, alors j'étend la classe mediaplayer et utilise le motif 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 cela vous aide, salut !!!

J'ai utilisé un singleton (en fait quelques-uns d'entre eux) dans une application qui utilisait pureMVC. Nous étions mécontents de la complexité introduite par ce cadre (il devenait compliqué et hiérarchisé de suivre les appels de méthode à travers les couches mvc). Nous avons donc utilisé un singleton central comme médiateur pour mieux séparer les couches les unes des autres.

0
Max Leske

La classe Singleton est généralement utilisée lorsque vous ne devez autoriser qu'une seule instanciation de la classe . En prenant pour exemple le monde réel, en cas de conception d'une bibliothèque par OOP, nous pouvons créer une classe de bibliothèque comme classe singleton.

0
Vishal Kumar