创建者模式 --- 单例模式

参考:深入理解设计模式(一):单例模式

一、什么是单例模式

单利模式就是单利对象的类只允许一个实例存在。

二、单利模式的应用场景

在这里插入图片描述

三、单利模式的优缺点

在这里插入图片描述

四、实现单例模式

1. 饿汉式

顾名思义很饿、这种模式下只要类被jvm加载了就会实例化好对象,并且线程是安全的、应是在类只会加载一次。
优点:线程安全
缺点:加载就创建、如果一直不用的时候会浪费内存。

public class Singleton {
	private static Singleton instance = new Singleton();
	// 私有构造方法防止外部实例化
	private Sinleton(){
	
	}
	// 通过getInstance获得单利对象
	public static Singleton getInstance(){
		return instance;
	}
}
2. 懒汉式

很懒、用的时候才创建对象。但在创建对象的时候由于存在你并发问题线程不安全、会创建多个实例。
优点:用的时候再加载、节省内存
缺点:线程不安全

public static Singleton {
	private static Singleton instance;
	// 构造方法私有化、不让外部类new对象
	private Singleton(){}
	// 通过getInstace获得对象
	public Singleton getInstance(){
		// 判断是否已创建
		if(instance == null){
			instance = new Singleton();
		}
		return instace;
	}
}
3. 加锁实现线程安全的懒汉式单利

我们可以在懒汉模式基础下在他的getInstance方法上synchronized这样会保证线程的安全但是每次不管有没有创建好都走锁明显是效率很低的,所以我们可以先判断是否为空、为空就走判断并且判读是加了锁的。这样既能保证较高的效率又能保证线程的安全。

public class Singleton {
    private static Singleton instance;
    // 私有化构造方法、不让外部构造
    private Singleton(){}
    // 通过getInstace获得对象
    private static Singleton getInstace(){
        if (instance == null){
            // 锁类
            synchronized (Singleton.class){
                if (instance == null){
                    return instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值