枚举单例模式

2020-01-26  本文已影响0人  睦月MTK

statement:本篇内容只是建立在我目前经验的基础之上,必然有不完善甚至是不正确的地方,请谨慎阅读,如果能指出错误与不足之处,更是不甚感激


一、传统单例模式的缺点
public class SingletonTest {
    private static final SingletonTest instance= new SingletonTest ();
    private SingletonTest () {}
    public static SingletonTest getInstance() {
        return instance;
    }
}
public class SingletonTest implements Serializable{
    private static final long serialVersionUID = 113454417668258756L;
    private static final SingletonTest instance= new SingletonTest ();
    //基础类型实例域
    private int fieldInt;
    //非基础类型实例域
    private transient String fieldString;
    private SingletonTest () {
        if(Objects.nonNull(instance)) throw new IllegalStateException("try to create new instance");
    }
    public static SingletonTest getInstance() {
        return instance;
    }
    
    private Object readResolve() {
        return instance;
    }
}

二、枚举单例模式的写法与优点
public enum EnumSingleton {
    INSTANCE;
}
public enum EnumSingleton {
    INSTANCE("hello");
    private String name;
    
    private EnumSingleton(String name) {
        this.name = name;
    }
    
    public String getName(){
        return name;
    }
    
    public static void main(String[] args) {
        EnumSingleton es = EnumSingleton.INSTANCE;
        System.out.println(es.getName());
    }
}

参考文档:
[1] 《Effective Java》

上一篇下一篇

猜你喜欢

热点阅读