枚举实现单例模式

266 阅读1分钟

单例模式大家都很熟悉,今天在使用枚举的时候想起了《effective java》里面说单元素的枚举类型已经成为实现Singleton的最佳方法,但是书里没有给出实现,于是我就想按自己的理解实现一下

实现长这样

class Demo {
    Demo() {
        System.out.println("create");
    }
    public void getInfo(){
        System.out.println("demo print");
    }
}
public enum SingleCase {
    instance(new Demo());

    SingleCase(Demo demo) {
        this.demo = demo;
    }

    public Demo demo;

}

测试一下

@Test
    public void test(){
        SingleCase singleCase=SingleCase.instance;
        singleCase.demo.getInfo();
        
        SingleCase singleCase3=SingleCase.instance;
        singleCase3.demo.getInfo();
        
        SingleCase singleCase2=SingleCase.instance;
        singleCase2.demo.getInfo();
        
        SingleCase singleCase1=SingleCase.instance;
        singleCase1.demo.getInfo();
        
        System.out.println(singleCase.demo==singleCase1.demo);
        System.out.println(singleCase1.demo==singleCase2.demo);
        System.out.println(singleCase2.demo==singleCase3.demo);
    }

结果如下

create
demo print
demo print
demo print
demo print
true
true
true

貌似这样就可以了,如有错误望大家指出更正一下。