猿问
下载APP

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

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

被美化的全局变量-变成了一个光荣的全局类。有人说打破面向对象的设计。

给我一些场景,除了好的旧记录器,在这里使用单例是有意义的。


HUH函数
浏览 93回答 3
3回答

慕标5265247

在我寻求真相的过程中,我发现使用Singleton的理由实际上很少。Internet上一次又一次出现的原因之一是“日志”类(您提到过)。在这种情况下,可以使用Singleton来代替类的单个实例,因为项目中的每个类通常都需要反复使用日志类。如果每个类都使用此日志类,则依赖项注入将变得非常麻烦。日志记录是“可接受的”Singleton的一个具体示例,因为它不影响代码的执行。禁用日志记录,代码执行保持不变。启用它,同样的。Misko把它放在下面的方式单身的根本原因“这里的信息有一种方式:从应用程序到记录器。即使记录器是全局状态,因为没有从记录器流向应用程序的信息,记录器也是可以接受的。”我相信还有其他合理的理由。亚历克斯·米勒,在“我讨厌的模式,谈到服务定位器和客户端UI也可能是“可接受的”选择。在辛格尔顿读更多我爱你但你让我失望了。

不负相思意

单身候选人必须满足三项要求:控制对共享资源的并发访问。将从系统的多个不同部分请求对资源的访问。只有一个物体。如果建议的Singleton只有一两个这样的需求,那么重新设计几乎总是正确的选择。例如,不可能从多个地方(打印菜单)调用打印机假脱机程序,因此可以使用互斥来解决并发访问问题。一个简单的记录器是一个可能有效的Singleton的最明显的例子,但是这可以随着更复杂的日志记录方案而改变。

翻阅古今

当您需要管理共享资源时,可以使用单例。例如,打印机假脱机程序。您的应用程序应该只有一个假脱机程序实例,以避免对同一资源的冲突请求。或数据库连接或文件管理器等。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答