对于这些关于帮助程序/实用程序类的简单问题,我从来没有找到好的答案:
- 为什么我要创建一个单例(无状态)而不是使用静态方法?
- 如果对象没有状态,为什么还需要对象实例?
最佳答案
通常,单例用于向应用程序引入某种全局状态。 (老实说,这通常不是真正必要的,但这是另一个话题。)
但是,在某些极端情况下,即使是 无状态 单例也是有用的:
- 您希望在可预见的将来使用 state 扩展它。
- 出于某些特定的技术原因,您需要一个对象实例。
示例:C#lock
或 Java 的同步对象同步
语句。 - 您需要继承,即,您希望能够使用相同的接口(interface)但使用不同的实现轻松地将您的单例替换为另一个。
示例:Toolkit.getDefaultToolkit()
Java 中的方法将返回一个单例,其确切类型取决于系统。 - 您希望 引用相等 sentinel value .
示例:C# 中的DBNull.Value
。
关于java - 为什么使用单例而不是静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2765060/