单例模式 之 单例模式——枚举

和 Holder 模式一样 采用的是 内部类的方式构造对象的实例

这里就多说了 至于 Holder 可以翻看上一章

代码:

/**
 * 枚举模式
 */
public class EnumSingleton {

    private EnumSingleton(){}

    /**
     * 采用 内部类 枚举的方式 实例化对象
     */
    private enum EnumSingletonDemo{
        INSTANCE;
        private  EnumSingleton instance;

        EnumSingletonDemo(){
            instance=new EnumSingleton();
        }

    }

    public static EnumSingleton getInstance(){
        return EnumSingletonDemo.INSTANCE.instance;
    }

    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
        for(int i=0;i<20;i++){
            new Thread(()->{
                System.out.println(EnumSingleton.getInstance());
            }).start();
        }
    }
    
}

测试结果:

com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d
com.company.EnumSingleton@531ebd8d