Java的单例模式——有C++基础的Java入门(五)

版权声明:欢迎转载,转载请注明出处哦! https://blog.csdn.net/qq_41647999/article/details/83447936

目录

什么是单例模式(Singleton)?

一、 懒汉模式

1、 实例

2、 原理

二、 饿汉模式

1、 实例


什么是单例模式(Singleton)?

设计模式:Java中,一共有23种设计模式,说白了就是比较牛的代码设计思想。单例模式里面非常简单的一种。

比如说windows的桌面回收站,只能打开这么一个回收站的界面,不能打开第二个界面。具体细节,我会拿出实例代码来详细阐述。

一、 懒汉模式

1、 实例

public class Singleton {

    //在单例类的内部创建一个自己本身的对象
    private static Singleton s=new Singleton();

    //获得单例的对象
    public static Singleton getSingleton(){
        return s;
    }
    //构造器的私有化
    private Singleton(){

    }
}

class TestDemo{
    public static void main(String[] args) {
        Singleton s1= Singleton.getSingleton();
        System.out.println(s1);
        
        //测试是否引用的是否是同一个对象
        Singleton s2= Singleton.getSingleton();
        System.out.println(s2);

        Singleton s3= Singleton.getSingleton();
        System.out.println(s3);
    }
}

运行结果

总结:说明引用的都是同一个对象,这就是单例模式。下面分析一下原理。

2、 原理

其实这就是一个静态属性的生命周期。

 因为构造器(就是构造函数)是空的,所以在堆中new Singleton只有一个地址,数据共享区的Singleton定义的s也有地址,指向堆中的0x999;当调用getSingleton()这个方法的时候,getSingleton就进栈产生一个地址,在getSingleton()执行完之后,返回了一个对象s(请看上方代码return s; ),s正好又是new Singleton()地址(请看上方代码private static Singleton s=new Singleton();)。所以在TestDemo中的s1的地址就会指向new Singleton的地址,在下面继续s2、s3的时候,都会拿到一个相同的地址。

二、 饿汉模式

1、 实例

public class Singleton {

    //在单例类的内部创建一个自己本身的对象
    private static Singleton s;
    public static Singleton getSingleton(){
        if (s == null){
            s=new Singleton();
            return s;
        }
        return s;
    }
    //构造器的私有化
    private Singleton(){

    }
}

class TestDemo{
    public static void main(String[] args) {
        Singleton s1= Singleton.getSingleton();
        System.out.println(s1);

    }
}

对比一下“懒汉模式”突然发现,“饿汉模式”巧妙的节省了资源。

猜你喜欢

转载自blog.csdn.net/qq_41647999/article/details/83447936