单身:好的设计还是拐杖?

单身人士是一个备受争议的设计模式,所以我对Stack Overflow社区对他们的看法感兴趣。

请提供您意见的理由,而不仅仅是“单身人士对于懒惰的程序员!”

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

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


为了保护单身人士:

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

  • 在C ++中,单例之后没有很好的自动清理方法。 这里有解决方法,稍微有一些方法可以做到,但没有简单的通用方法来确保始终调用单例的析构函数。 这不是那么可怕的记忆 - 只是把它看作更多的全局变量,为此目的。 但是如果你的单例分配其他资源(例如锁定一些文件)并且不释放它们,那可能会很糟糕。
  • 我个人的看法:

    我使用单身,但如果有合理的选择,就避免使用单身。 到目前为止,这对我来说效果很好,而且我发现它们是可测试的,尽管测试的工作稍微多一些。


    谷歌拥有一个Java Singleton检测器,我相信它最初是一个必须在Google生成的所有代码上运行的工具。 简单的理由删除单身人士:

    因为它们可以使测试变得困难并隐藏设计中的问题

    有关更明确的解释,请参阅Google为什么“单身人士有争议”。


    单身男人只是一群穿着漂亮裙子的全球变数。

    全局变量和单身人士一样都有其用处,但如果您认为自己在单身人士身上做了一些很酷且有用的事情,而不是使用糟糕的全局变量(每个人都知道全局变量很糟糕),那么您很不幸被误导了。

    链接地址: http://www.djcxy.com/p/20333.html

    上一篇: Singletons: good design or a crutch?

    下一篇: Why is the Python readline module not available on OS X?