Exactement où le Pattern Singleton est utilisé dans l'application réelle?
J'étais juste curieux de savoir exactement où le pattern singleton est utilisé...
Je sais comment le modèle fonctionne et où il peut être utilisé, mais j'ai personnellement jamais utilisé dans toute application réelle.
Peut-on donner un exemple où il peut être utilisé..
Je serais vraiment reconnaissant si quelqu'un peut expliquer comment et où ils ont utilisées dans l'application.
Merci,
Swati
- Ce que j'ai appris ici: n'utilisez pas de singleton à tous. 🙂 Ce modèle n'est pas à jour en raison de filetage et d'autres raisons.
- Il est tout à fait possible d'implémenter le pattern singleton dans un thread-safe manière. La testabilité est beaucoup plus important de raison de ne pas utiliser les singletons, de l'OMI.
- Skeet Bien, je dois admettre que j'ai juste répété ce que l'on m'a dit ici. J'ai cherché sur le commentaire, mais je ne trouve pas. Ils m'ont dit d'utiliser le "modèle d'Application" à la place.
- Ont-ils expliquer ce qu'est le "modèle d'application" est? Ne peux pas dire que j'ai entendu parler de celle-là...
- J'ai peur de dident vraiment l'obtenir. Il a qqch à faire avec où est l'instance créée. Autant que je me souvienne, ils utilisent une instance statique dans la méthode getInstance() ou alors.
- le filetage n'est pas tellement un problème avec les singletons. (si ils sont écrits dans un thread-safe façon, si nécessaire). D'autres raisons pourraient être plus grands enjeux, d'autres raisons d'être: des applications distribuées
- La plupart des classes ne doit pas être thread-safe. Fil de sécurité est difficile et c'est un euphémisme. Par conséquent, l'ajout d'un non-utile exigence pour la classe thread-safe est probablement une mauvaise idée. / Les Singletons sont simplement mauvais design. Pour mon argent, le pire aspect de la dépendance. Tout code qui les utilise (ou utilise un code qui les utilise, etc), a maintenant des hypothèses sur la façon dont les processus (classe chargeurs en Java) sont utilisés.
- Par exemple l'exécution d'une version d'essai d'un logiciel avec une licence et une connexion de base de données ,qui utilise le pattern singleton dans le monde réel. peut-être le gourou de jon skeet peut fournir des exemples comme cela.
- Cette question est vieux, mais je dois dire quelque chose: Par exemple, dans un jeu, où vous avez un Joueur que vous contrôlez, et des ennemis contrôlés par une IA et que vous souhaitez mettre en œuvre Son. N'est-ce pas singleton utilisable ici? Vous pourriez avoir un soundmanager qui charge les sons que vous avez besoin (prise de son ou d'endommager son...) et applique les Réglages (volume, etc.). Vous pouvez simplement tenir une instance du singleton soundmanager dans chaque objet et quand il tire lire le son. Si vous n'avez pas de soins sur les Paramètres de son dans chaque classe.
Vous devez vous connecter pour publier un commentaire.
Généralement les singletons sont utilisés pour la configuration globale. L'exemple le plus simple serait
LogManager
- il y a une statiqueLogManager.getLogManager()
méthode, et une seule instance globale est utilisée.En fait, ce n'est pas un "vrai" singleton que vous pouvez obtenir votre propre classe de
LogManager
et de créer des instances de cette façon -, mais il est généralement utilisé comme un singleton.Un autre exemple serait
java.lang.Runtime
- à partir de la documentation:C'est à peu près la définition d'un singleton 🙂
Maintenant le pattern singleton est surtout mal vu ces jours - ci- il introduit un couplage étroit, et qui rend les choses qui utilisent le singleton plus difficile à tester, que vous ne pouvez pas facilement se moquer que de la composante. Si vous pouvez sortir sans elle, tant mieux. Injecter des dépendances, si possible à la place.
Runtime
à être un, car il n'a pas d'état, il a juste uglifies code client. (Bien que vous pourriez demander qu'il garde mutable statique.) Le Singletonness deLogManager
n'est pas appliquée, sauf une (sans-papiers) circumventable vérification d'autorisation.LogManager
: où vous avez effectivement besoin de l'état global/configuration dans l'ensemble de votre application. Mais je vous le déconseille quand même 🙂the singleton pattern is mostly frowned upon these days - it introduces tight coupling, and makes things which use the singleton harder to test
. Pouvez-vous nous donner plus d'infos sur cette. MerciQuelques exemples:
J'ai utilisé le pattern singleton en ligne de Football de l'Équipe Système Magasin. nous avons appliqué le pattern singleton à un ShoppingCart classe.
Vous avez seulement besoin d'un exemple de la charrette par une instance de l'application. si le singleton semblait que c'est la meilleure solution pour cette situation.
Singleton est un joli modèle de conception. Avant de décider sur le modèle premier de faire une analyse approfondie du problème et de la solution. Si dans votre solution d'un objet n'a qu'un exemple et que vous voulez le modèle que dans votre conception, alors vous devriez utiliser le pattern singleton. Par exemple, si vous êtes à la modélisation d'un PC dans le logiciel, il ne peut y avoir qu'une seule instance d'un PC à l'égard de votre programme en cours d'exécution. Comme Jon Skeet dit java.lang.Runtime est modélisé comme un singleton parce que pour tous les objets java qui sont chargés et exécutés à l'intérieur d'un environnement d'exécution java il n'y a qu'une seule instance d'exécution.
Encore beaucoup de fois, il est utilisé pour les mauvaises raisons. Ne jamais créer un singleton, de sorte que vous pouvez facilement accéder à l'objet (comme Objet::instance() ) à partir de n'importe où, sans passage de l'objet autour de la. La est la pire utilisation j'ai jamais rencontré.
Par exemple l'exécution d'une version d'essai d'un logiciel avec une licence et une connexion de base de données ,qui utilise le pattern singleton dans le monde réel. peut-être le gourou de jon skeet peut fournir des exemples comme cela.
Lorsque vous utilisez l'Enregistreur, vous utilisez le pattern Singleton pour l'Enregistreur de classe. Dans le cas où il n'est pas un Singleton, chaque client aura son propre objet Logger et il y aura un accès simultané sur l'Enregistreur de données d'instance en environnement Multithread, et plusieurs clients de créer/écrire dans le fichier Journal simultanément, ce qui conduit à la corruption de données.
Compte de la situation des AudioDriverService, qui est conçu dans le Pattern Singleton. Nous sommes donc permis de créer une instance unique de AudioDriverService classe. Maintenant effectivement votre Windows Media Player ou Player Youtube les deux partagent le même objet de AudioDriverService plutôt que de créer une nouvelle instance.
Le Pattern Singleton peut être utilisé pour le chargement de la configuration , par exemple dans une application web, nous sommes censés générer un fichier qui doit être stocké quelque part dans le serveur. Maintenant, cet emplacement peut extraites à partir d'un fichier de configuration(fichier de propriétés) à l'aide d'une classe singleton.depuis l'emplacement est unique et peut changer fréquemment à l'avenir, si nous utilisons un fichier de configuration de sorte que peut être modifié sans le déploiement de l'application, de manière à refléter les changements et l'emplacement sera globale et unique à travers l'application
Le pattern Singleton est généralement utile lorsque l'objet est créé une seule fois et partagée
à travers les différents threads/Applications.
Prenons le cas que vous êtes la mise en œuvre de l'propriétés de la classe de charge pour une imprimante.
Maintenant les Imprimantes peuvent être de la variante de propriétés. Pour exemple:-
Imprimante Monochrome,
Imprimante Couleur,
Scanner automatique de Support de l'Imprimante et ainsi de suite...
À chaque fois lors du démarrage de ce fichier de configuration est à la charge pour permettre à quelques boutons/applications
sur l'INTERFACE utilisateur-dire de l'onglet ou de n'importe quelle Imprimante de l'INTERFACE utilisateur.
La valeur des fonctionnalités prises en charge sont stockées sous la forme d'une table de configuration comme, disons, 1 si
fonctionnalité prise en charge et 0 si pas pris en charge.
Basé sur les fonctionnalités prises en charge, nous permettent de désactiver certaines fonctionnalités et applications
sur l'INTERFACE utilisateur. Maintenant ce fichier de configuration localisation dans le cas des imprimantes fabriquées par une société unique
sont toujours stockés à un chemin fixe.
Le fichier de valeurs de changement/seront lus uniquement dans les scénarios suivants:-
1. Au Démarrage De L'Ordinateur.
2. sur l'Ajout ou la suppression de tout nouveau matériel périphérique.
Nous pouvons utiliser une classe singleton pour mettre en œuvre la lecture de fichiers de configuration. Comme les mêmes valeurs
c'est à dire de la config ne change pas sur l'INTERFACE utilisateur de l'intervention et peuvent être changés que sur le matériel d'intervention.
C'est un exemple que je peux penser de l'endroit où nous pouvons mettre en œuvre modèle de conception Singleton.
J'ai utilisé un singleton (en fait, un couple d'entre eux) dans une application utilisée pureMVC. Nous avons été malheureux au sujet de la complexité de ce cadre mis en place (il est devenu compliqué et la hiérarchisation de suivre les appels de méthode à travers les couches mvc). Nous avons donc utilisé une centrale singleton en tant que médiateur afin de mieux séparer les couches les unes des autres.
- Je utiliser un lecteur multimédia dans mon application android, j'ai donc étendre la classe de mediaplayer, et a utilisé le pattern singleton parce que j'ai besoin d'une seule instance, et être en mesure d'appeler la même instance dans toute autre partie de mon application pour vérifier si est en cours de lecture, ou de ce fichier est en cours de lecture.
Espère que cela vous aide, cordialement!!!!
Classe Singleton est essentiellement utilisé lorsque vous devez l'autoriser une seule instanciation de la classe.
En prenant l'exemple du monde réel, Dans le cas de la programmation orientée objet la conception d'une bibliothèque, nous pouvons créer une bibliothèque de classe en tant que classe singleton.