【手撕代码】单例模式

面试过程中,经常被遇到手写单例模式的代码,本文就常用的几种单例模式的写法进行总结。

单例模式,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去 new,因为构造器是被 private 修饰的,一般通过 getInstance() 的方法来获取它们的实例。

一、懒汉式

  • 用到时再去创建
public class Singleton {

    private static  Singleton instance;

    private Singleton(){};

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

二、恶汉式

  • 初始化时即创建,用到时直接返回
public class Singleton {

    private static  Singleton instance = new Singleton();

    private Singleton(){};

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

三、静态内部类【推荐】

public class Singleton {

    private static class SingletonHolder{
        private static final Singleton INSTTANCE = new Singleton();
    }

    private Singleton(){};

    public static final Singleton getInstance(){
        return SingletonHolder.INSTTANCE;
    }
}

四、双重校验锁【推荐】

public class Singleton {

    private volatile static Singleton singleton;
    
    private Singleton(){};
    
    public static Singleton getSingleton(){
        if(singleton == null){
            synchronized(Singleton.class){
                if(singleton == null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    } 
}

 

你可能感兴趣的:(手撕代码)