when一个单例类比只有静态方法的类更受欢迎?

H2O*_*aCl 1 java singleton

当一个单例类优先于只有静态方法和私有默认构造函数的类时?

请投票.

Bal*_*usC 5

当一个单例类优先于只有静态方法和私有默认构造函数的类时?

当你需要一个实例时.例如,传递方法参数.


Ed *_*aub 5

使用单例可以更好地控制何时进行初始化. 对于静态类,任何初始化都必须在类加载时,您无法控制.例如,对静态最终MEMBER的简单引用将触发类加载.使用单例,初始化可以简单地推迟到很晚 - 通常,直到第一次使用.

延迟初始化的原因可能是:

  • 它很贵,而且你并不总是需要它
  • 您无法初始化,直到初始化其他资源(例如,数据库连接).在这种情况下,一个懒惰实例化的单例通常提供正确的操作顺序而没有任何显式控制 - 如果在初始化其他资源之后它没有被引用,则一切都是免费的.

使用单例来提高可测试性. 如果你需要制作一些单例的模拟对象(广义上)来测试它的客户端,那么一种方法就是在其使用上放置一个接口,并提供一个不同类的测试单例但实现了相同的接口.

使用单例也可以简化初始化测试.

您可能需要调试初始化时使用单例. 静态初始化的堆栈跟踪可能令人费解.调试也可能令人费解.如果类早期加载,它可能会在main()中第一行的断点被触发之前中断.