Unique instance de la classe Java
Je veux créer une seule instance d'une classe. Comment puis-je créer une seule instance d'une classe en Java?
new MyClass()
exécutée une seule fois?OT - citation de la question précédente: "je suis très familier avec le langage de programmation java" - girinie, honnêtement, je ne m'attendais pas à cette question - vous à améliorer vos compétences Java avant de vous attaquer à votre boutique web du projet (stackoverflow.com/questions/2055016/web-site-design-idea-closed)! À moins que vous devez savoir (maître?) les patterns GoF.
OriginalL'auteur giri | 2010-01-14
Vous devez vous connecter pour publier un commentaire.
Pour créer un vraiment unique instance de votre classe (ce qui implique un singleton au niveau de la JVM), vous devriez faire de votre classe Java
enum
.Le pattern singleton utilise état statique et comme un résultat généralement les résultats dans le chaos lorsque les tests unitaires.
Ceci est expliqué dans l'Article 3 de Joshua Bloch Effectif de Java.
Je pense que vous trouverez ce est un abus de ce qu'est un enum est destiné à faire. Un enum est de plusieurs éléments (par exemple, les jours de la semaine), de sorte que vous pouvez avoir un type sûr de l'exécution d'interrupteurs/comparaisons etc. Ils ne sont pas pour une seule instance d'une classe. Les Singletons se compliquent avec le chargeur de classes différentes structures, mais c'est le cas, peu importe comment la mettre en œuvre.
reportez-vous à l'efficacité de Java. Java les énumérations sont bien plus que de simples énumérations qui sont disponibles dans d'autres langues.
Si vous avez un coup d'oeil à la définition d'une énumération, vous verrez que c'est un ensemble d'éléments. Un singleton est par définition un élément unique. Je suis pleinement conscient que Java les énumérations sont plus que C énumérations comme je les utilisent sur une base régulière. Je pense juste que c'est un abus de la notion. Voici quelques liens Wikipedia: en.wikipedia.org/wiki/Enumeration et en.wikipedia.org/wiki/Enumeration_(programmation)
En tant que classe singleton, est Enum instancié qu'une seule fois?
OriginalL'auteur gpampara
Très basique singleton.
Vous pouvez également utiliser le paresseux titulaire modèle ainsi
Cette version ne va pas créer une instance du singleton jusqu'à ce que vous l'accès getInstance(), mais en raison de la façon dont la JVM/classloader gère la création à l'intérieur de la classe, vous êtes garanti d'avoir seulement le constructeur appelé une seule fois.
La seule amélioration que je ferais à cette paresse de l'initialisation du singleton.
Pourquoi le bloc statique? Vous pouvez juste l'initialisation de l'instance sur la même ligne où vous déclarez. @Taylor L Vous n'avez pas forcément toujours envie paresseux init, qui dépend du reste de l'application et de ses exigences d'amorçage.
J'ai entendu dire que inline instanciation peut provoquer des problèmes avec les anciens de la JVM. Vous pouvez également utiliser un emballage de classe de l'instance. Cela pourrait avoir également été paresseusement instancié, mais comme la plupart des choses en Java, il existe beaucoup de façons de la peau le chat proverbial pour tous les énumérer dans un exemple simple 🙂
OriginalL'auteur Shane
utiliser le pattern singleton.
Le pattern Singleton
Mise à jour :
C'est pourquoi j'ai ajouté un lien. Il est inutile de répéter la même information ici
ne voyez pas le lien, votre modifier et mon commentaire doit avoir été asynchrone .. j'ai enlevé le -1
Pourquoi ai-je besoin de réinventer la roue et de mettre toutes les informations ici tout en ayant des milliers de ressources sur le web?
(Je tiens à signaler que je n'ai pas downvote que, pour une fois.)
OriginalL'auteur Chathuranga Chandrasekara
De sorte que tous les fils de mise à jour de stocker les différentes BrokerLocation dans un endroit tableau.
Par exemple:
OriginalL'auteur user2001977