language-agnostic - 滥用单例类的最常见示例

标签 language-agnostic design-patterns singleton

什么时候不应该使用单例类,尽管这样做可能很诱人?如果我们有一份我们应该小心避免的最常见的“单发炎”实例列表,那就太好了。

最佳答案

不要将单例用于可能演变成可倍增资源的东西。

这可能听起来很愚蠢,但是如果您将某个东西声明为单例,那么您就是在强烈声明它是绝对独一无二的。你越来越多地围绕它构建代码。然后当你在数千行代码之后发现它根本不是单例时,你有大量的工作摆在你面前,因为所有其他对象都期望 WizBang 类的“神圣”对象是单例.

典型示例:“此应用程序只有一个数据库连接,因此它是一个单例。” - 坏主意。您可能希望将来有多个连接。最好创建一个数据库连接池并只用一个实例填充它。行为类似于单例,但所有其他代码将具有用于访问池的可增长代码。

编辑:我知道理论上您可以将单例扩展为多个对象。然而,没有真正的生命周期(如池化/解池化),这意味着已经分发的对象没有真正的所有权,即现在的多单例必须是无状态的,才能被不同的方法和线程同时使用。

关于language-agnostic - 滥用单例类的最常见示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/135347/

相关文章:

algorithm - 寻找最佳的文件大小组合

java - 当父类型始终是子类时,如何设计整个层次结构以具有“不可变”父字段?

c# - 时间耦合与工作单元

java - 使用函数/构造函数参数创建单例(对于例如注入(inject)很有用)

asp.net - 简单注入(inject)器 ASP.NET Singleton Dispose

swift - Swift 中 pthread_mutex_lock 的替代方案?

java - 动态创建 boolean 值列表

language-agnostic - 何时升级到新版本的语言或框架?

php - Magento 无法检测客户是否登录

language-agnostic - 是否有任何模式或是否有任何用于继承数据/对象的标准术语?