为什么使用单例而不是静态方法?
2022-08-31 10:05:15
对于这些关于帮助程序/实用程序类的简单问题,我从未找到过很好的答案:
- 为什么我要创建单例(无状态)而不是使用静态方法?
- 如果对象没有状态,为什么需要对象实例?
对于这些关于帮助程序/实用程序类的简单问题,我从未找到过很好的答案:
通常,单例用于向应用程序引入某种全局状态。(说实话,这比真正必要的要多,但这是另一个时间的话题。
但是,在一些极端情况下,即使是无状态单例也可能有用:
lock
synchronized
Toolkit.getDefaultToolkit()
DBNull.Value
我可以看到使用无状态单例而不是静态方法类的情况,即用于依赖注入。
如果你有一个直接使用的实用程序函数的帮助器类,它会创建一个隐藏的依赖关系;您无法控制谁可以使用它,或者在哪里使用它。通过无状态单例实例注入相同的帮助器类,您可以控制使用它的位置和方式,并在需要时替换/模拟它/等。
使其成为单例实例只是确保您分配的该类型的对象不会超出必要的范围(因为您只需要一个)。