【Effective Java】3.单例

来源:互联网 发布:软件开发进度表模板 编辑:程序博客网 时间:2024/06/05 16:09

传统单例

private 构造函数

最优单例实现:使用Enum

1.无需担心序列化

先说说传统单例,其如果序列化再反序列化产生的效果和构造一个新的对象差不多的。除非增加以下来阻止:

//readResolve to prevent another instance of Singleton    private Object readResolve(){        return INSTANCE;    }

而Enum自身源码中已实现防护代码:

/**     * prevent default deserialization     */    private void readObject(ObjectInputStream in) throws IOException,        ClassNotFoundException {        throw new InvalidObjectException("can't deserialize enum");    }    private void readObjectNoData() throws ObjectStreamException {        throw new InvalidObjectException("can't deserialize enum");    }

2.无需double-check,方便安全

并且枚举创建的单例在JVM层面上也能保证实例是thread-safe的。

/*** Singleton pattern example using Java Enumj*/public enum EasySingleton{    INSTANCE;}

使用单例的时候用EasySingleton.INSTANCE 就可以了。

0 0