为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

HUH函数 2019-06-19 15:26:26

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

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

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


查看完整描述

3 回答

?
慕标5265247

在我寻求真相的过程中,我发现使用Singleton的理由实际上很少。

Internet上一次又一次出现的原因之一是“日志”类(您提到过)。在这种情况下,可以使用Singleton来代替类的单个实例,因为项目中的每个类通常都需要反复使用日志类。如果每个类都使用此日志类,则依赖项注入将变得非常麻烦。

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

我相信还有其他合理的理由。亚历克斯·米勒,在“我讨厌的模式,谈到服务定位器和客户端UI也可能是“可接受的”选择。

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


查看完整回答
反对 回复 2019-06-19
?
不负相思意

单身候选人必须满足三项要求:

  • 控制对共享资源的并发访问。
  • 将从系统的多个不同部分请求对资源的访问。
  • 只有一个物体。

如果建议的Singleton只有一两个这样的需求,那么重新设计几乎总是正确的选择。

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

一个简单的记录器是一个可能有效的Singleton的最明显的例子,但是这可以随着更复杂的日志记录方案而改变。


查看完整回答
反对 回复 2019-06-19
?
翻阅古今

当您需要管理共享资源时,可以使用单例。例如,打印机假脱机程序。您的应用程序应该只有一个假脱机程序实例,以避免对同一资源的冲突请求。

或数据库连接或文件管理器等。


查看完整回答
反对 回复 2019-06-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信