关于设计模式:我应该何时使用单例?

荣耀的全球变量 - 成为一个辉煌的全球课程。 有人说打破面向对象的设计。

给我一些场景,除了那些使用单例的有意义的老式记录器。


在追求真相时,我发现实际上很少有“可接受的”使用Singleton的理由。

往往会在互联网上反复出现的一个原因是“记录”类(你提到过)。 在这种情况下,可以使用Singleton来代替类的单个实例,因为日志类通常需要一遍又一遍地使用,让项目中的每个类都感到恶心。 如果每个类都使用此日志记录类,则依赖注入会变得很麻烦。

日志记录是“可接受的”Singleton的具体示例,因为它不会影响代码的执行。 禁用日志记录,代码执行保持不变。 启用它,一样。 Misko在单身人士的根本原因中以下面的方式说:“这里的信息以一种方式流动:从你的应用程序到记录器。即使记录器是全局状态,因为没有信息从记录器流入你的应用程序,所以记录器是可以接受的。

我相信还有其他有效的理由。 Alex Miller在“Patterns I Hate”中谈到了服务定位器和客户端UI也可能是“可接受”的选择。

在辛格尔顿阅读更多我爱你,但你让我失望。


辛格尔顿候选人必须满足三个要求:

  • 控制对共享资源的并发访问。
  • 将从系统的多个不同部分请求访问资源。
  • 只能有一个对象。
  • 如果你提出的Singleton只有一个或两个这样的要求,重新设计几乎总是正确的选择。

    例如,打印机假脱机程序不太可能从多个位置调用(“打印”菜单),因此您可以使用互斥锁来解决并发访问问题。

    一个简单的记录器是一个可能有效的Singleton最明显的例子,但是这可以通过更复杂的记录方案来改变。


    读取只应在启动时读取并将其封装在Singleton中的配置文件。

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

    上一篇: On design patterns: When should I use the singleton?

    下一篇: How is Math.Pow() implemented in .NET Framework?