语言无关 – 单身:好的设计还是拐杖?

单例是一个热烈争论的设计模式,所以我对Stack Overflow社区对它们的想法感兴趣。

请提供您的意见的原因,而不只是“单身人士是为懒惰的程序员!

这里是一个相当不错的文章,关于这个问题,虽然它是反对使用Singletons:
scientificninja.com: performant-singletons

有谁有任何其他好的文章吗?也许支持单身人士?

在辩护单身人士:

>它们不像全局变量一样糟糕,因为全局变量没有标准强制的初始化顺序,并且您可以很容易地看到由于天真或意外的依赖顺序导致的非确定性错误。单例(假设它们在堆上分配)在所有全局变量之后创建,并且在代码中非常可预测的位置。
>它们对资源懒惰/缓存系统非常有用,例如缓慢I / O设备的接口。如果你智能地建立一个单一的接口到一个慢的设备,没有人调用它,你不会浪费任何时间。如果另一段代码从多个地方调用它,您的单例可以同时优化缓存,并避免任何双重查找。您还可以轻松避免单例控制资源上的任何死锁条件。

反对单身人士:

>在C中,没有很好的方法来自动清理单身之后。有解决方法,以及稍微有点怪怪的方法来做到这一点,但是没有简单的,通用的方式来确保单例析构器总是被调用。这不是那么可怕的记忆方面 – 只是认为它是更多的全球变量,为此目的。但是如果你的singleton分配其他资源(例如锁定一些文件)并且不释放它们可能是坏的。

我自己的意见:

我使用单例,但如果有合理的替代,避免它们。这对我来说效果很好,我已经发现它们是可测试的,虽然稍微更多的工作要测试。

http://stackoverflow.com/questions/11831/singletons-good-design-or-a-crutch

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:语言无关 – 单身:好的设计还是拐杖?