【单例模式】重新认识单例模式

灵魂拷问

我对单例模式的了解是,在堆内存中开辟一个内存空间,在初始化时便进行编译,以便于减少后续开销。说人话就是一个类仅创建一个实例,并提供一个全局访问的点。
但是,饿汉式我是知道,懒汉式是个啥呦。
在这里插入图片描述

单例模式定义

单例模式的核心是:

一个类仅创建一个实例,并提供一个访问他的全局访问的点

条件:

1.一个类仅有一个实例

2.它必须自行创建这个实例

3.提供一个全局访问的点

废话不多少,上代码:

public class Singleton {

    //饿汉式最重要的,需要初始化变量
    /**
     * 1.一个类只会创建一个实例
     */
    private  static  Singleton instance = new Singleton();

    /**
     * 2.构造器,他可以自行构建
     */
    private  Singleton(){}

    /**
     * 3.提供一个给全局访问的点
     */
    public  Singleton getInstance(){
        return  instance;
    }

}

好的,一个简单的单例模式就构建好了。
这个有一个缺点。每次启动的类加载阶段,便会自动创建。
那我们能不能在用的时候再创建,以便节约内存。

单例模式(懒汉模式)

其实取名懒汉,多少是和懒加载有关系。
我们简单实现下。

public class Singleton {

    //饿汉式最重要的,需要初始化变量
    /**
     * 
     */
    private  static  Singleton instance = null;

    /**
     * 构造器,他可以自行构建
     */
    private  Singleton(){}

    /**
     * 提供一个给全局访问的点
     */
    public  Singleton getInstance(){
    if(null == instance){
    	instance = new Singleton();
        }
        return  instance;
    }

}

好吧,这个多线程就会炸裂,
这样加锁和double-check就完美了

public class Singleton {

    //饿汉式最重要的,需要初始化变量
    private  static  Singleton instance = null;

    /**
     * 2.构造器,他可以自行构建
     */
    private  Singleton(){}

    /**
     * 3.提供一个给全局访问的点
     */
    public Singleton getInstance() {
        //懒汉式,加锁
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

}

打完收工,每次学习设计模式都有新的感悟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值