Singleton模式(单例模式) 饿汉式和懒汉式
目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例。
好比一个国家就只有一个皇帝(XXX),此时每个人叫的“皇帝”都是指叫的XXX本人;
常见单例模式类型:
饿汉式单例:直接将对象定义出来
懒汉式单例:只给出变量,并不将其初始化;
总结:
饿汉式,static修饰,随着类的加载而加载,会损耗性能,但是方法相对简单
懒汉式 第一次用的时候相对较慢,因为需要加载!线程,不安全!
package reviewDemo; //单例模式 //饿汉式,直接把对象构造出来 class SingleDemo{ private static SingleDemo s1 = new SingleDemo(); private SingleDemo(){ //提供私有化的构造方法,那么外界就不能构造对象了! } public static SingleDemo getS1() { return s1; } } //懒汉式,先定义,但是不创建对象 class SingleDemo2{ private static SingleDemo2 s3 ; private SingleDemo2(){ //提供私有化的构造方法,那么外界就不能构造对象了! } public static SingleDemo2 getS3() {//这是一个方法,返回值为创建的对象! if(s3 == null){ s3 = new SingleDemo2(); }//和饿汉式的区别,此时才来创建对象! return s3; } } public class Demo14 { public static void main(String[] args) { SingleDemo s1 = SingleDemo.getS1(); SingleDemo s2 = SingleDemo.getS1(); SingleDemo2 s3 = SingleDemo2.getS3(); SingleDemo2 s4 = SingleDemo2.getS3(); System.out.println(s1 == s2); System.out.println(s3 == s4); } } 输出:true true 备注:枚举更加安全些 package reviewDemo; enum Stu{ jake; //将构造方法私有化起来,反射也不能创建对象,安全 private Stu(){ } } public class Demo15 { public static void main(String[] args) { } }