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) {

    }

}

猜你喜欢

转载自www.cnblogs.com/fanweisheng/p/11131558.html