Java设计模式---单利模式

1、何为设计模式?

设计模式:是一套被反复使用,多数人知晓,经过分类编码目的,代码设计经验的总结。

目的:使用设计模式是为了提高代码重用性,让代码更容易让人理解,并保证代码的可靠性。

2、何为单利模式

单利模式:顾名思义就是只能有一个实例,不能再出现第二个,就如同地球上没有两片一模一样的树叶一样。在此处即,一个类只能有一个实力,且整个项目都能访问该实例。

两大类

  • 饿汉模式:实例在类装载时创建
  • 懒汉模式:实例在第一次使用时创建

饿汉模式

public class Singleton{
    private static Singleton instance = new Singleton();
    
    private Singleton(){     }

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

由于instance的初始化是在类加载时进行的,类加载是由ClassLoader来实现的,如果初始化太早,就会造成资源浪费。当然,如果所需的单利占用的资源很少,并且也不依赖其他数据,那么这种实现方式也是很好的。

懒汉模式

public class Singleton(){
    private static volatile Singleton instance;
    
    private Singleton(){    }

    public static Singleton getInstance(){
        if(instance == null){
            synchronized(Singleton.class){
                if(instance == null){
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

}

上述代码中使用双重检查,并给instance的声明加上volatile关键字。

第一个if(instance == null),其实是为了解决一进入代码就加锁所出现的效率问题,只有instance为null 的时候,才进入synchronized 的代码大大减少了几率;

第二个if(instance == null),则是为了防止可能出现多个实例的情况。

另外,为什么要给instance的声明加上volatile关键字,是为了防止指令的重排序。

关于原子操作、指令重排、volatile、synchronized的概念请参照另一篇 

https://blog.csdn.net/qq_32330135/article/details/88825251

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值