Quels sont les meilleurs exemples du modèle de design singleton dans les API de Java? Est le runtime code> classe A Singleton? P>
3 Réponses :
Seulement deux exemples se vient à l'esprit:
Java .Lang.Runtime # getRuntime () code> li>
Java .awt.desktop # getDesktop () code> li>
ul> Voir aussi strong>: p> Il renvoie la même instance à chaque fois et il a un
constructeur code> privé. p> p>
Il y a quelques-uns à l'API Swing / AWT. Les singletons doivent être utilisés avec soin. C'est pourquoi il n'y en a pas tant dans toute l'API Java
Vous pouvez avoir plusieurs objets code> Desktop code> dans le même VM. Sur les applets de Sun / Oracle Jre de différents sites auront différents Desktop Code> s. Runtime Code> Ne porte pas d'état, il n'est donc pas utile d'un singleton (et vous remarquerez que son utilisation est inutilement verbeuse).
@TOM: le bureau code> est en effet plus un multiton. À propos du Runtime Code>, je me demandais la même chose ... ils doivent avoir quelque chose i> à l'esprit lorsque vous le conçus pendant les âges sombres JDK 1.0.
Ma meilleure estimation est qu'ils ont l'intention de renvoyer une implémentation différente selon la plate-forme, comme Toolkit code>. Cela aurait pu être fait plus humanitaire en fournissant des méthodes statiques qui en avant. Bien sûr, je pense que tout aurait dû être fait dans une "paramétrage d'une ci-dessus".
Remarque Singletons doit être utilisé avec soin et réflexion. Considérez les arguments contre les singletons et votre situation avant de mettre en œuvre un. La surutilisation de singletons est un anti-motif - similaire aux variables globales. P>
Pourquoi les singletons sont diaboliques < / p>
Je les ai utilisés dans le passé et que je vois des avantages. J'ai également été fortement ennuyé lorsque vous essayez de faire des tests de développement axé sur eux autour de ce que c'est un domaine où ils sont diaboliques. L'héritage également d'eux entraîne un comportement difficile à comprendre - au moins en Python - je ne sais pas bien sûr en Java. Généralement, vous ne le faites pas à cause de cela. Donc, comme enfiler ceux-ci semblent une bonne idée d'abord, puis vous rencontrez dans les pièges et réalisez bien peut-être que ce n'est pas si bon après tout. P>
Ceci est pour Swing: singleframeapplication . Découvrez Cette présentation décrit merveilleusement comment ça marche? P>
Ce n'est pas un singleton et ne faisant pas partie de l'API Java standard.
Pourquoi pensez-vous que ce n'est pas un singleton?
C'est une classe abstraite et il n'y a pas getinstance () code> méthode ou similaire qui retourne auto i>. Le Javadoc ne dit pas non plus à aucun mot / indice à ce sujet. Toute la classe entière ressemble à une usine statique avec des suppléments.
BTW: Utilisez @nickname code> pour en informer les autres sur les contra-commentaires dans les réponses des autres. Je n'ai pas été informé de votre commentaire jusqu'à ce que j'ai parcouru ce sujet une fois de plus.
@Balusc: Eh bien, il étend effectivement l'application AppFramework.dev.java. NET / NONAV / JAVADOC / AppFramework-1.03 / ... - Regardez la méthode Getinstance. Je suis tout à fait sûr que c'est singleton :)
Si la classe est extensible, cela signifie qu'il ne dispose pas de constructeur code> code> de code>, puis il est par définition pas un singleton. C'est une classe d'usine (qui "par coïncidence" renvoie le même exemple à chaque fois).
@Balusc: pouvez-vous expliquer cela alors? [De Javadoc]: Getinstance () L'application Singleton ou un espace réservé si le lancement n'a pas encore été appelé.
Je dirais que le mot "singleton" est mal utilisé ici. Vous voyez, cela peut même retourner un espace réservé. Je pense qu'ils ont choisi le mot "singleton" pour préciser qu'une instance statique est utilisée.
@Balusc: Je pense en un seul nom en groupe "Caimrame" est mal utilisé, car il peut avoir plus de cadres, il a l'air étrange. Mais il y a une autre classe - ApplicationContext dans Link I Publié ici dans Commentaire. La présentation que j'ai postée en réponse décrit que très bien, mais c'est un peu plus difficile singleton. Ou est-ce? Tu m'as fait totalement incertain :)