用私有构造器或枚举类型强化Singleton属性(3)

一、Singleton 表明那些本质上惟一的系统组件、增长客户端调试难度性能

二、Singleton 实现方法1:调试

  • 构造器保持私有
  • 导出公有静态成员
  • 享有特权的的客户端,采用AccessibleObject.setAccessible(),经过反射机制调用 私有构造器
  • 解决上述问题:能够修改构造器,建立第二个对象抛异常

好处是:对象

  • 类成员很清晰看出是单例

三、Singleton 实现方法 2:接口

  • 构造器保持私有
  • 导出公有静态成员
  • 享有特权的的客户端,采用AccessibleObject.setAccessible(),经过反射机制调用 私有构造器

好处是:序列化

  • JVM都能实现,静态工厂调用内联化,无性能劣势
  • 更加灵活,易于修改
  •  

四、可序列化(Serializable)反射

  • 仅仅实现接口是不够的
  • 必须说明全部实例域都是瞬时的(transient)
  • 必须提供readResolve() 方法
  • 不然,每次反序列化时都会建立新实例(以下,返回同一个实例)

五、Singleton 实现方法 3:方法

  • 只包含单个元素的枚举类型
  • 实现 Singleton 最佳方法
  • 更加简洁
  • 无偿提供序列化机制
  • 绝对防止屡次实例化

相关文章
相关标签/搜索