java单例模式饿汉式与懒汉式(萌新向)

java单例模式饿汉式与懒汉式

本篇文章写给刚接触java相关工作的萌新,内容较浅易懂,深入的东西本人也在持续学习中,有错误还请多多指教~

java的单例模式以及里面的饿汉式懒汉式几乎是java相关职业必考的面试题,其实这两个东西看上去很简单也确实很简单,与其去记代码不如理解原理,理解之后闭着眼睛都能写出来。

饿汉式

光看名字,既然是饿汉,那就是饥不择食,怎样体现饥不择食呢?就是在初始化这个饿汉式单例类的时候,它自身就已经实例化了。可能有些绕口,大家有点java基础的话应该都能理解初始化一个类之后,一直到使用到这个类之前,这段时间里,这个“饿汉”因为太饿了,在初始化的时候就在自身内部把自己实例化好了,当你要使用的时候就直接拿无需再实例化。

换言之就是一种典型的空间换时间的思想。

//饿汉式单例类.在类初始化时,已经在自身内部实例化   
public class Singleton {
    private Singleton() {};
    
    private static final Singleton singleton = new Singleton();
    
    public static Singleton getInstance() {
        return singleton;
    }
}

懒汉式

理解了饿汉式再来理解懒汉式就很好理解了,懒汉式与饿汉式恰恰相反,在初始化这个懒汉式单例类之后一直到使用它之前的这段时间里,这个“懒汉”因为太懒了,不到最后关头就不想“动”,也就是说初始化之后只有在使用它的时候它才会实例化。

换言之就是一种典型的时间换空间的思想。

//懒汉式单例类.在第一次调用的时候才会实例化自己   
public class Singleton {
    private Singleton() {};
    
    private static Singleton singleton = null;
    
    public static Singleton getInstance() {
         if (singleton == null) {
             singleton = new Singleton();
         }
        return singleton ;
    }
}

最后不论是饿汉还是懒汉,构造方法一定是用private去限制的,不然也无法达到饿汉或者懒汉的效果了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值