Je veux créer une instance unique d'une classe. Comment puis-je créer une seule instance d'une classe en Java?Instance unique de la classe Java
Répondre
Pour créer une instance véritablement unique de votre classe (impliquant un singleton au niveau de la JVM), vous devez faire de votre classe un Java enum
. Le motif singleton utilise un état statique et, par conséquent, entraîne généralement des dégâts lors du test unitaire.
Ceci est expliqué à l'article 3 de la version Java de Joshua Bloch.
Pour être exact, le singleton sera seulement au niveau du loadloader, avoir à contrôler tous les chargeurs de classe dans une JVM pour être en mesure de garantir un singleton au niveau de la JVM – pgras
Je pense que vous trouverez que c'est un abus de ce que l'on veut faire. Une énumération concerne plusieurs éléments connexes (par exemple, les jours de la semaine), de sorte que vous pouvez avoir un moyen sûr d'exécuter des commutations/comparaisons, etc. Il ne s'agit pas d'une instance unique d'une classe. Les singletons se compliquent avec différentes structures de classloader, mais c'est le cas quelle que soit la façon dont vous l'implémentez. – Shane
@Shane, reportez-vous à Java efficace. Les énumérations Java sont beaucoup plus que les énumérations simples disponibles dans d'autres langues. – gpampara
utilisez le motif singleton.
Mise à jour:
Quel est le modèle singleton? Le pattern singleton est un modèle de conception qui est utilisé pour restreindre instanciation d'une classe à un objet
singleton Très basique.
public class Singleton {
private static Singleton instance;
static {
instance = new Singleton();
}
private Singleton() {
// hidden constructor
}
public static Singleton getInstance() {
return instance;
}
}
Vous pouvez également utiliser le modèle de support paresseux et
public class Singleton {
private Singleton() {
// hidden constructor
}
private static class Holder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return Holder.INSTANCE;
}
}
Cette version ne sera pas créer une instance du singleton jusqu'à ce que vous accédez getInstance(), mais en raison de la façon dont la machine virtuelle Java/classloader gère la création sur la classe interne, vous êtes garanti que le constructeur ne soit appelé qu'une seule fois.
Explication: Je ne pense pas qu'il n'y a aucun moyen de restreindre l'exécution de constructeur. La solution est de: rendre le constructeur privé - de sorte que personne ne puisse l'invoquer de l'extérieur. Utilisez une fonction statique pour initialiser la seule instance d'objet - si elle est NULL, appelez le constructeur en interne. – effkay
La seule amélioration que je ferais à ceci est l'initialisation paresseuse du singleton. –
Pourquoi le bloc statique? Vous pouvez simplement init l'instance sur la même ligne où vous l'avez déclarée. @Taylor L Vous n'avez pas toujours besoin d'init paresseux, cela dépend du reste de l'application et de ses exigences d'amorçage. –
In Java, how can we have one instance of the BrokerPacket class in two threads?
Pour que toutes les mises à jour stockent les différents BrokerLocation dans un tableau d'emplacement. Par exemple:
class BrokerLocation implements Serializable {
public String broker_host;
public Integer broker_port;
/* constructor */
public BrokerLocation(String host, Integer port) {
this.broker_host = host;
this.broker_port = port;
}
}
public class BrokerPacket implements Serializable {
public static BrokerLocation locations[];
}
- 1. Instance de classe de base unique
- 2. Java: classe de retour (pas une instance)
- 3. Entité commerciale: instance privée VS instance unique
- 4. Java: Création d'une nouvelle instance de la classe d'interface utilisateur
- 5. Instance unique d'une page Web
- 6. VB.NET Instance d'objet unique uniquement
- 7. Obtenir une instance unique d'un objet
- 8. Appel de procédure stockée à instance unique
- 9. Couches de stockage à instance unique
- 10. Java: préférez la classe utilitaire en fonction d'une instance de classe ou de méthodes statiques?
- 11. Instance de classe constante
- 12. Instance de classe enfant?
- 13. recréer instance dans la classe de base
- 14. accès extérieur classe cette instance
- 15. Java. Instance de longueur variable
- 16. Test de l'existence d'une instance unique -Singleton-C#
- 17. Instance d'objet désérialisé sans définition de classe
- 18. Comment implémenter un design de type "instance unique"?
- 19. Création d'une instance d'une classe Java imbriquée dans ColdFusion
- 20. WCF Percall et une instance unique
- 21. instance unique et notifier dans la barre d'état système
- 22. Limitation de la classe .NET à une instance d'objet unique sur la frontière de l'ordinateur => "singleton inter-processus"
- 23. Java: nouvelle instance du bytecode
- 24. Quelle est la bonne façon de créer une instance de classe Generic en Java?
- 25. Instance unique de projet ou plusieurs instances de projet?
- 26. Affichage de données d'objet métier à instance unique sur SSRS
- 27. Un moyen unique d'identifier une instance de page dans HttpContext
- 28. Problème créant instance d'une classe
- 29. C++: Instance de classe de stockage dans la mémoire allouée
- 30. C++ initialisation classe tableau instance
'new MyClass()' exécuté une 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 * devez * améliorer vos compétences Java avant d'attaquer votre projet de boutique en ligne //stackoverflow.com/questions/2055016/web-site-design-idea-closed)! Au moins, vous devriez connaître (maître?) Les modèles du GoF. –