关于设计模式:我应该何时使用单例?
荣耀的全球变量 - 成为一个辉煌的全球课程。 有人说打破面向对象的设计。
给我一些场景,除了那些使用单例的有意义的老式记录器。
在追求真相时,我发现实际上很少有“可接受的”使用Singleton的理由。
往往会在互联网上反复出现的一个原因是“记录”类(你提到过)。 在这种情况下,可以使用Singleton来代替类的单个实例,因为日志类通常需要一遍又一遍地使用,让项目中的每个类都感到恶心。 如果每个类都使用此日志记录类,则依赖注入会变得很麻烦。
日志记录是“可接受的”Singleton的具体示例,因为它不会影响代码的执行。 禁用日志记录,代码执行保持不变。 启用它,一样。 Misko在单身人士的根本原因中以下面的方式说:“这里的信息以一种方式流动:从你的应用程序到记录器。即使记录器是全局状态,因为没有信息从记录器流入你的应用程序,所以记录器是可以接受的。
我相信还有其他有效的理由。 Alex Miller在“Patterns I Hate”中谈到了服务定位器和客户端UI也可能是“可接受”的选择。
在辛格尔顿阅读更多我爱你,但你让我失望。
辛格尔顿候选人必须满足三个要求:
如果你提出的Singleton只有一个或两个这样的要求,重新设计几乎总是正确的选择。
例如,打印机假脱机程序不太可能从多个位置调用(“打印”菜单),因此您可以使用互斥锁来解决并发访问问题。
一个简单的记录器是一个可能有效的Singleton最明显的例子,但是这可以通过更复杂的记录方案来改变。
读取只应在启动时读取并将其封装在Singleton中的配置文件。
链接地址: http://www.djcxy.com/p/14423.html