荣耀的全局变量 - 成为荣耀的全局类。有人说打破了面向对象的设计。
给我一些场景,除了使用单例的好旧记录器之外。
在我寻求真相的过程中,我发现实际上很少有“可接受的”理由来使用单例。
在互联网上反复出现的一个原因是“日志记录”类(您提到过)。在这种情况下,可以使用 Singleton 来代替类的单个实例,因为日志记录类通常需要被项目中的每个类一遍又一遍地使用而令人作呕。如果每个类都使用这个日志类,依赖注入就变得很麻烦。
日志记录是“可接受的”单例的一个具体示例,因为它不会影响代码的执行。禁用日志记录,代码执行保持不变。启用它,同样的。Misko 在Root Cause of Singletons中这样说,“这里的信息流向一种方式:从您的应用程序进入记录器。即使记录器是全局状态,由于没有信息从记录器流入您的应用程序,记录器是可以接受的。”
我敢肯定还有其他正当理由。Alex Miller 在“我讨厌的模式”中谈到服务定位器和客户端 UI 也可能是“可接受的”选择。
在 Singleton 阅读更多我爱你,但你让我失望了。