什么时候不应该使用单身课,尽管这样做可能很诱人?如果我们列出最常见的"单发性炎症",我们应该注意避免,这将是非常好的.
不要将单例用于可能演变为可倍增资源的东西.
这可能听起来很愚蠢,但如果你宣布一个单身的东西,你就会发表一个非常强烈的声明,它绝对是独一无二的.你正在围绕它构建代码,越来越多.然后,当你发现数千行代码之后它根本不是单例时,你面前有大量的工作,因为所有其他对象都希望WizBang类的"神圣"对象是单例.
典型示例:"此应用程序只有一个数据库连接,因此它是一个单例." - 馊主意.您可能希望将来有多个连接.最好创建一个数据库连接池,并用一个实例填充它.像Singleton一样,但所有其他代码都有可扩展的代码来访问池.
编辑:据我所知,理论上你可以将单例扩展为多个对象.然而,没有真正的生命周期(如汇集/解放),这意味着没有真正的所有权已经分发,即现在的多单身必须是无状态的,以便由不同的方法和线程同时使用.
无论如何,好的单身人士只是让事情变得静止.所以你要么实际上使数据全局化,而且我们都知道全局变量是坏的,或者你正在编写静态方法,现在不是很好用吗?
史蒂夫·叶格(Steve Yegge)对于为什么单身人士不好,这是一个更详细的咆哮.基本上你不应该在几乎所有的情况下使用单身人士,你不可能真的知道它不会在不止一个地方需要.