什么时候不应该使用单例类,尽管这样做可能很诱人?如果我们有一份我们应该小心避免的最常见的“单发炎”实例列表,那就太好了。
最佳答案
不要将单例用于可能演变成可倍增资源的东西。
这可能听起来很愚蠢,但是如果您将某个东西声明为单例,那么您就是在强烈声明它是绝对独一无二的。你越来越多地围绕它构建代码。然后当你在数千行代码之后发现它根本不是单例时,你有大量的工作摆在你面前,因为所有其他对象都期望 WizBang 类的“神圣”对象是单例.
典型示例:“此应用程序只有一个数据库连接,因此它是一个单例。” - 坏主意。您可能希望将来有多个连接。最好创建一个数据库连接池并只用一个实例填充它。行为类似于单例,但所有其他代码将具有用于访问池的可增长代码。
编辑:我知道理论上您可以将单例扩展为多个对象。然而,没有真正的生命周期(如池化/解池化),这意味着已经分发的对象没有真正的所有权,即现在的多单例必须是无状态的,才能被不同的方法和线程同时使用。
关于language-agnostic - 滥用单例类的最常见示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/135347/