Maison  >  Article  >  Java  >  qu'est-ce que le modèle java singleton

qu'est-ce que le modèle java singleton

王林
王林original
2019-11-11 14:37:152585parcourir

qu'est-ce que le modèle java singleton

Qu'est-ce que le modèle singleton ?

Le modèle singleton est un modèle de conception courant qui garantit que les instances d'une classe sont des singletons.

Avantages du mode singleton :

(1) Tout d'abord, il doit économiser les ressources mémoire. Quelle que soit la fréquence à laquelle les instances sont créées via des méthodes exposées, elles peuvent l'être. garanti d'être créé. L'objet est le même objet d'instance dans la mémoire système ;

(2) Flexibilité, puisque la création de toutes les instances est contrôlée par cette classe, toute cette classe peut modifier de manière flexible le processus d'instanciation ;

(3) Accès contrôlé aux instances, les classes singleton peuvent facilement contrôler l'accès contrôlé aux instances uniques

Inconvénients du mode singleton :

(1 ) Le mode singleton n'a pas d'interface et n'est pas facile à étendre ;

(2) Vous ne pouvez pas utiliser le mode réflexion pour créer un singleton, sinon un nouvel objet sera instancié

(3) Utiliser un singleton paresseux Faites attention aux problèmes de sécurité des threads lors de l'utilisation du mode exemple ;

package index;
public class Superman {
    //空的构造器
    private Superman(){}
    
    //实例化对象
    private static Superman supermanInstance = new Superman();
    
    //获取实例化对象的静态函数getSupermanInstance()
    public static Superman getSupermanInstance(){
        return supermanInstance;
    }
}
Le singleton est nouveau à l'avance lorsque la classe est chargée, et un objet supermanInstance est instancié au début. Que votre programme ait besoin d'appeler cet objet ou non, il est déjà prêt ; aucun délai de chargement, afin de réduire la charge du programme, un chargement paresseux est requis dans la plupart des cas, donc cette façon d'implémenter un singleton n'est pas le meilleur choix.

Méthode singleton paresseuse (écriture monothread)

package index;
public class Superman {
    //空的构造器
    private Superman(){}

    //实例化对象;只声明 不使用new进行实例化
    private static Superman supermanInstance = null;

    //获取实例化对象的静态函数getSupermanInstance()
    public static Superman getSupermanInstance(){
        if(supermanInstance==null){ //如果为null的情况再进行实例化
            supermanInstance = new Superman();
        }
        return  supermanInstance;
    }
}
Déclarer un objet sans l'instancier et appeler la fabrique statique lorsque le programme a besoin de l'instancier Méthode getSupermanInstance(), l'objet déclaré est jugé dans la méthode, et s'il est nul, instanciez-le. Cette méthode d'écriture peut obtenir l'effet d'un chargement retardé, mais elle n'est pas thread-safe s'il y a deux threads en multi-. threading En même temps, l'appel de la méthode de fabrique statique getSupermanInstance() peut créer à plusieurs reprises des instances de cette classe, détruisant le caractère unique du singleton.

Tutoriel recommandé :
Tutoriel Java

 ;

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn