Maison  >  Article  >  Java  >  Explication détaillée du modèle Java Singleton

Explication détaillée du modèle Java Singleton

巴扎黑
巴扎黑original
2017-09-18 11:32:401173parcourir

Cet article présente principalement les informations pertinentes sur le mode Java singleton (mode homme affamé et mode homme paresseux). J'espère que tout le monde pourra maîtriser cette partie du contenu grâce à cet article. Les amis dans le besoin pourront se référer à

modèle java singleton

Singleton de style Hungry

Pour le modèle Hungry-Han, nous pouvons le comprendre de cette façon : ceci La classe singleton a très faim, elle a désespérément besoin de manger, elle crée donc l'objet dès que la classe est chargée.

Classe singleton paresseuse

Pour le mode paresseux, on peut le comprendre ainsi : la classe singleton est très paresseuse et ne fonctionne que lorsqu'elle en a besoin. Action, ne savez jamais se préparer tôt. Il détermine uniquement s'il existe un objet lorsqu'il en a besoin. Sinon, il crée immédiatement un objet puis renvoie S'il existe un objet, il ne le crée pas et le renvoie immédiatement.

Le modèle de conception singleton est souvent utilisé dans les bases de données liées JDBC

Remarque :

1 Nous utilisons couramment le premier style chinois affamé, Parce que :


(1) Puisque le modèle de conception singleton est adopté, il s'agit d'utiliser l'objet de la classe singleton, donc instanciez-le d'abord


( 2) Il existe certains risques de sécurité dans le style paresseux. Il est nécessaire d'ajouter le mot-clé de synchronisation synchronisé, sinon ce ne sera pas un singleton, mais l'efficacité sera légèrement inférieure après l'ajout de synchronisé

2 Dans le premier type. Dans la méthode, le code private static final Single SINGLE=new Single(); pourquoi y a-t-il final


Parce que les classes modifiées par le mot-clé final ne peuvent pas être héritées et que les variables membres modifiées par final ne peuvent pas être modifiées ? .


Le final est utilisé ici pour renforcer et mettre en évidence : la notion de « le même objet » - il n'y a qu'un tel objet, et il ne peut pas être modifié.


Si vous ne modifiez pas Single SINGLE avec final, alors vous vous retrouverez dans une situation : l'affaire est très compliquée, et cet objet est modifié par inadvertance, provoquant diverses erreurs.

Le premier ( Style chinois affamé ):

Idée :


(1) Ne laissez pas d'autres classes créer des objets de cette classe, c'est-à-dire définir le constructeur sur privé !

(2) Personnalisez un objet de cette classe
(3) Fournissez l'objet personnalisé, c'est-à-dire définissez une méthode get et la valeur de retour est un objet de cette classe.

Analyse :


Première étape : privatiser le constructeur dans la classe singleton et utiliser une fonction get() pour fournir de tels objets à l'extérieur, afin que les autres classes ne puissent pas construire objets de cette classe.

Étape 2 : Mais si d'autres classes veulent appeler la méthode dans cette classe singleton, elles ne peuvent utiliser que le nom interne.Method name () pour l'implémenter, ce qui nécessite que cette méthode soit statique.
Étape 3 : Parce que les méthodes statiques ne peuvent accéder qu'aux membres statiques ! Alors réglez SINGLE sur statique


public class SingleDemo { 
  public static void main(String[] args) { 
     Single s1=Single.getSingle(); 
     s1.setNumber(44); 
     Single s2=Single.getSingle(); 
     s2.setNumber(55); 
     System.out.println("s1.number="+s1.number); 
     System.out.println("s2.number="+s2.number); 
     if(s1.equals(s2)){ 
        System.out.println("s1与s2是同一对象即:s1==s2");//if条件成立 
       } 
   } 
} 
 
 
class Single{ 
  int number; 
  public int getNumber() { 
       return number; 
     } 
  public void setNumber(int number) { 
       this.number = number; 
     } 
  private Single(){};//第一步 
  private static final Single SINGLE=new Single();//第三步 
  public static Single getSingle(){//第一步和第二步 
       return SINGLE; 
  } 
}

Le deuxième type (style paresseux) :


package cn.com; 
public class SingleDemo2 { 
   public static void main(String[] args) { 
      Single s1=Single.getSingle(); 
      s1.setNumber(44); 
      Single s2=Single.getSingle(); 
      s2.setNumber(55); 
      System.out.println("s1.number="+s1.number); 
      System.out.println("s2.number="+s2.number); 
      if(s1.equals(s2)){ 
        System.out.println("s1与s2是同一对象即:s1==s2");//if条件成立 
       } 
     } 
 
 
} 
 
 
class Single{ 
   int number; 
   public int getNumber() { 
       return number; 
     } 
   public void setNumber(int number) { 
       this.number = number; 
     } 
   private Single(){}; 
   private static Single SINGLE=null; 
   public static synchronized Single getSingle(){//多线程时加上synchronized是关键!!! 
      if(SINGLE==null){ 
         SINGLE=new Single(); 
         return SINGLE; 
       } 
      else{ 
         return SINGLE; 
        } 
   } 
}
Ce qui précède est une explication détaillée du modèle de conception Java singleton. Si vous avez des questions, veuillez laisser un message ou accéder à la communauté de ce site pour en discuter. Merci d'avoir lu. peut aider tout le monde. Merci pour votre soutien à ce site !

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