使用单例可以更好地控制何时进行初始化. 对于静态类,任何初始化都必须在类加载时,您无法控制.例如,对静态最终MEMBER的简单引用将触发类加载.使用单例,初始化可以简单地推迟到很晚 - 通常,直到第一次使用.
延迟初始化的原因可能是:
使用单例来提高可测试性. 如果你需要制作一些单例的模拟对象(广义上)来测试它的客户端,那么一种方法就是在其使用上放置一个接口,并提供一个不同类的测试单例但实现了相同的接口.
使用单例也可以简化初始化测试.
您可能需要调试初始化时使用单例. 静态初始化的堆栈跟踪可能令人费解.调试也可能令人费解.如果类早期加载,它可能会在main()中第一行的断点被触发之前中断.