早些时候的Singleton模式如下:
老版的单例模式,存在的第一个问题,一个有权限的客户端可以使用反射机制,调用私有构造方法,就可以构建多个实例,这是不希望看到的。所以为了防止反射攻击,必须在构造方法上检查创建第二个实例时,抛出异常。
存在的第二个问题不多见,假如,一个单例的类,需要被实例化,简单的一个实现 Serializable 接口是不够的。
为了保证类是单例的,该类的实例必须是瞬时的(transient),并且提供一个 readResolve方法,否则反序例化时,会异致第二个类实例的产生。
自JDK1.5发行版开始,我们还有一种方式构建Singleton,将更加安全,而且是可序列化的,绝对的单例。