第3条 用私有构造器或者枚举类型强化Singleton属性(单例模式)
定义:Singleton指仅仅被实例化一次的类。
实现方法1:
- 私有构造器,公有的静态final域,私有的构造器仅被调用一次,用来实例化公有的静态final域。
- 注意:享有特权的客户端可以借助AccessibleObject.setAccessible方法,通过反射机制调用私有的构造器。
- 解决方案:修改构造器,让它在被要求创建第二个实例的时候抛出异常。
实现方法2:
- 静态工厂方法,对于静态方法.getInstance的所有调用,都会返回同一个对象的引用,永远不会创建其他的实例。
- 注意:想可序列化的,仅仅加上implements Serializeable是不够的,每次被反序列化一个序列化的实例时,都会创建一个新的实例。
- 解决方案:在类中加入readResolve方法。
实现方法3:
- 编一个包含单个元素的枚举类型。
- 优点:功能上与公有域方法相近,但是更简洁,无偿提供了序列化机制,绝对防止多次实例化,可以应付复杂的序列化或者反射攻击。
总结:单元素的枚举类型已经成为实现Singleton的最佳方法。

版权声明:本文为qq_40705058原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。