Maison  >  Article  >  Java  >  Explication du modèle singleton dans les modèles de conception Java

Explication du modèle singleton dans les modèles de conception Java

巴扎黑
巴扎黑original
2017-07-21 17:03:451336parcourir

J'ai appris qu'il existe 23 modèles de conception en Java. Les modèles de conception sont des résumés d'expériences de codage qui sont connus de la plupart des gens, utilisés à plusieurs reprises et sont conventionnels. Chaque modèle de conception représente un problème qui se produira de manière répétée dans le projet, de sorte que l'utilisation raisonnable des modèles de conception peut parfaitement résoudre de nombreux problèmes.

Il est nécessaire d'apprendre les modèles de conception Java. Bien que l'héritage et les interfaces n'aient pas été appris en orientation objet, le modèle singleton dans les 23 modèles de conception peut déjà être compris.

Singleton est un modèle de conception couramment utilisé. Dans les applications Java, un objet singleton peut garantir qu'une seule instance de l'objet existe dans une JVM. Il existe deux formes d'expression spécifiques :

package 面向对象;//单例设计模式第一种public class Singleton 
{public static void main(String[] args)
    {
    SingletonDemo a=SingletonDemo.getInstance();
    }
}class SingletonDemo
{private static SingletonDemo a =null;private SingletonDemo(){}public static SingletonDemo getInstance()
    {if(a==null)
        {
            SingletonDemo a=new SingletonDemo();
        }return a;
    }
}

De cette façon, on peut voir que les nouveaux objets ne sont créés que lorsque la méthode est appelée, mais c'est facile à utiliser en multi-thread Des problèmes surviennent, c'est pourquoi la méthode suivante est généralement utilisée pour le développement.

 1 package 面向对象; 2  3 public class Singleton_2 
 4 { 5     public static void main(String[] args) 6     { 7         Singleton_2Demo a=Singleton_2Demo.getInstance(); 8     } 9 }10 11 class Singleton_2Demo12 {13     private Singleton_2Demo(){}14     private static Singleton_2Demo a=new Singleton_2Demo();15     public static Singleton_2Demo getInstance()16     {17         return a;18     }19 }

Cette méthode est simple et il n'est pas nécessaire de considérer les problèmes de multi-threading

Grâce à cela modèle de conception, nous pouvons améliorer le précédent. Les exercices orientés objet que j'ai écrits pendant mes études ont été ajustés pour implémenter le modèle singleton.

Code original :

package 面向对象; class Student 
{    private String name;private int number;private String sex;private boolean learn;private String a;
    Student()
     {
         name="未知";
         number=000;
         sex="未知";
         learn=false;
         a="未知";
     }     public void setName(String name)
     {         this.name=name;
     }     public void setNumber(int number)
     {         this.number=number;
     }     public void setSex(String sex)
     {         this.sex=sex;
     }     public void setLearn(boolean learn)
     {         this.learn=learn;
     }     void scan()
    {if(this.learn==true)
        {
            a="在学习";    
        }else{
            a="不在学习";
        }    
         System.out.print("姓名:"+this.name+" 学号:"+this.number+" 性别;"+this.sex+" 是否在学习:"+a);
    }
    
} class Data
 {     public static void main(String[] arg)
     {
         Student XiaoMin=new Student();
         XiaoMin.setName("小明");
         XiaoMin.setNumber(13023);
         XiaoMin.setSex("男");
         XiaoMin.setLearn(true);
         XiaoMin.scan();
     }
 }

Mode boîtier unique :

package 面向对象;//实现单例设计模式
 class Student_1 
{    private String name;private int number;private String sex;private boolean learn;private String a;     private Student_1()
     {
         name="未知";
         number=000;
         sex="未知";
         learn=false;
         a="未知";
     }     private static Student_1 b=new Student_1();     public static Student_1 getInstance()
     {         return b;
     }     public void setName(String name)
     {         this.name=name;
     }     public void setNumber(int number)
     {         this.number=number;
     }     public void setSex(String sex)
     {         this.sex=sex;
     }     public void setLearn(boolean learn)
     {         this.learn=learn;
     }     void scan()
    {if(this.learn==true)
        {
            a="在学习";    
        }else{
            a="不在学习";
        }    
         System.out.print("姓名:"+this.name+" 学号:"+this.number+" 性别;"+this.sex+" 是否在学习:"+a);
    }
    
} class Data_2
 {     public static void main(String[] arg)
     {
         Student_1 XiaoMin=Student_1.getInstance();
         XiaoMin.setName("小王");
         XiaoMin.setNumber(13023);
         XiaoMin.setSex("男");
         XiaoMin.setLearn(true);
         XiaoMin.scan();
     }
 }

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