Définition: La fonction principale du modèle singleton est de s'assurer que dans les applications Java, une seule instance d'une classe existe.
Dans de nombreuses opérations, comme l'établissement d'une connexion de base de données de répertoire, une telle opération unique est requise.
En outre, Singleton peut être étatique; Les classes singleton pouvez-vous conserver ce décompte et augmenter automatiquement 1 en synchronisant en toute sécurité.
De plus, Singleton peut également être apatride. Fournit des fonctions de type outil,
Le modèle Singleton nous offre la possibilité de mettre en œuvre de cette façon. L'avantage de l'utilisation de Singleton est qu'il peut économiser de la mémoire, car il limite le nombre d'instances et est propice à la collection Java Garbage.
Nous voyons souvent que les chargeurs de classe sont également implémentés en mode singleton en mode usine, car la classe chargée appartient réellement aux ressources.
Comment utiliser le mode singleton
Le modèle de singleton général a généralement plusieurs formes:
La copie de code est la suivante:
classe publique singleton {
singleton privé () {}
// N'est-il pas étrange de définir une instance de vous-même en vous-même?
// Notez que c'est privé uniquement pour les appels internes
Instance singleton statique privée = new Singleton ();
// Voici une méthode statique pour l'accès externe à cette classe, qui peut être accessible directement
Singleton statique publique GetInstance () {
retour d'instance;
}
}
La deuxième forme:
La copie de code est la suivante:
classe publique singleton {
Instance singleton statique privée = null;
Singleton Singleton Synchronisé public public GetInstance () {
// Cette méthode est améliorée par rapport à ce qui précède.
// Créer des instances pendant l'utilisation, améliorant l'efficacité!
if (instance == null)
instance = new singleton ();
retour d'instance;
}
}
Singleton.getInstance () peut être utilisé pour accéder aux classes Singleton.
La deuxième forme ci-dessus est l'initialisation paresseuse, ce qui signifie que le singleton initial est appelé pour la première fois et il n'est pas nécessaire de générer à l'avenir.
Notez que le formulaire d'initialisation paresseux est important. Il existe de nombreuses discussions sur l'initialisation paresseuse sur le verrouillage à double vérification (DCL), et ceux qui y sont intéressés l'étudieront davantage.
On pense généralement que la première forme est plus sûre.
Choses à noter lors de l'utilisation du mode singleton
Parfois, dans certains cas, l'utilisation de Singleton ne peut pas atteindre le but de Singleton. -server et cross-jvm.
Prenons le service de service de la source de la boutique d'animaux de compagnie de Sun (animal de compagnie 1.3.1) à titre d'exemple et analysez-le brièvement:
Dans la boutique d'animaux, il existe deux types de services de service, l'un est dans le répertoire EJB et l'autre est dans le répertoire Web. Services de positionnement, mais pourquoi les séparer? Après une étude minutieuse de ces deux serviteurs, j'ai trouvé la différence: Servicelocator adopte le mode Singleton sur le Web, le service de service appartient au positionnement des ressources, donc bien sûr, le mode Singleton doit être utilisé. Cependant, dans EJB, le modèle Singleton a perdu sa fonction, donc le service de transfert est divisé en deux types, l'un est pour les services Web et l'autre est pour les services EJB.
Le motif Singleton semble simple et est très pratique à utiliser, mais il est très difficile de bien l'utiliser.