单例模式的四种实现方式

原本单纯的我一直认为这世界上的单例模式,只有饿汉和懒汉呢,今天发现了,原来单例模式有四种实现方式。

饿汉模式

public class Singleton {
    /**
     * 饿汉式
     */
    private Singleton() {

    }
    
    private static final Singleton SINGLETON = new Singleton();
    
    public static Singleton getInstance(){
        return SINGLETON;
    }
    
    public void system(){
        System.out.println("---lin---> singleton");
    }
    
}

懒汉模式

public class Singleton2 {
    /**
     * 懒汉式
     */
    private Singleton2() {

    }

    private static Singleton2 singleton2 = null;

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

    public void system(){
        System.out.println("---lin---> singleton2");
    }
}

枚举模式

public enum Singleton3 {
    INSTANCE;
    private Singleton3(){
        
    }
    
    public void system(){
        System.out.println("---lin---> singleton3");
    }
}

Holder模式

public class Singleton4 {
    /**
     * 带有Holder的方式
     * 类级内部类,也就是静态的成员内部类,该内部类的实例与外部类的实例没有绑定关系
     * 只有被调用的时候才会装在,从而实现了延迟加载
     */
    private Singleton4() {

    }

    private static class SingletonHolder {
        /**
         * 静态初始化器,由JVM来保证线程安全
         */
        public static final Singleton4 INSTANCE = new Singleton4();
    }

    public static Singleton4 getInstance() {
        return SingletonHolder.INSTANCE;
    }

    public void system() {
        System.out.println("---lin---> singleton4");
    }
}

你可能感兴趣的:(单例模式的四种实现方式)