超级好懂的设计模式——单例模式

精心整理了设计模式——单例模式,包括代码解释方便理解,但是难免不了存在纰漏,感谢大家的指正与理解!觉的写的不错的小伙伴儿,一键三连支持一下,后期会有持续更新!!抱拳了罒ω罒

1. 单例模式简介

  • 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
  • 常见的使用场景:线程池,数据库连接池、网站计数器、Spring容器默认Bean
  • 构建方式:饿汉式,懒汉式,内部类(重点)

不管是哪一种实现方式,单例类的构造函数必须是私有的;instance 成员变量和方法必须是 static 的。

2. 饿汉式

指全局的单例实例在类装载时构建,因此不需要考虑线程安全问题

class HungrySingleton{
	//类加载是就直接实例化对象。
    private static HungrySingleton instance = new HungrySingleton();
    private HungrySingleton(){}

    public static HungrySingleton getInstance(){
        return instance;
    }
}

优点:没有加锁,执行效率会提高。
缺点:类加载时就初始化,浪费内存。

3. 懒汉式(非线程安全)

指全局的单例实例在第一次被使用时构建。

class LazySingleton{
    private static LazySingleton instance;
    private LazySingleton(){}
    //没有加入synchronized关键字的版本是线程不安全的
    public static LazySingleton getInstance(){
        if (instance == null)
            instance = new LazySingleton();
        
        return instance;
    }
}

4. 懒汉式(双重检查加锁版本)

class LazySingleton{
    // 添加volatile 关键字,内存模型中出现指令重排现象
    private volatile static LazySingleton instance;
    private LazySingleton(){}
    public static LazySingleton getInstance(){
        if (instance == null)
            //给代码块加锁,而不是给整个方法加锁,提高性能,降低开销
            synchronized (LazySingleton.class){
                if (instance == null)
                    instance = new LazySingleton();
            }
        
        return instance;
    }
}

5. 静态内部类单例模式(推荐)

  该方法集成的饿汉式和懒汉式的优点,既延时加载又线程安全,还不需要synchronized 锁。
  外部类加载时不需要加载静态内部类,不被加载则不占用内存(延迟加载),当外部类调用getInstance方法时,才加载静态内部类,静态属性保证了全局唯一,静态变量初始化保证了线程安全

class InnerClassSingleton{
	//内部类
    private static class InnerClassHolder{
        private static final InnerClassSingleton instance = new InnerClassSingleton();
    }
    private InnerClassSingleton(){}
    
    public static InnerClassSingleton getInstance(){
        return InnerClassHolder.instance;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

corlor_龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值