首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单例模式

单例模式
EN

Software Engineering用户
提问于 2011-01-16 18:21:05
回答 7查看 3.7K关注 0票数 26

可能重复: 什么时候合适?

我是一个新的程序员(进入我的第一份工作的4个月),最近对设计模式产生了兴趣。我最近使用过的一种是Singleton。然而,看看一些关于这条线的评论。它有一些坏的反馈,谁能解释一下原因吗?

我发现它在某些地方很有用,但是如果不使用静态类,我可能也能做到这一点。

EN

回答 7

Software Engineering用户

回答已采纳

发布于 2011-01-16 18:56:17

它与全局变量有相同的问题。

它为您提供了对可变状态的全局访问。

任何使用Singleton的东西现在都紧密耦合到它上。

尽量避免紧耦合。这使得代码很难更新。很难测试。

如果您的选择是Singleton或全局变量。至少Singleton提供了延迟初始化。

但通常最好避免全局可访问的可变状态,并通过参数或构造函数将所有依赖项传递给代码。这使您的代码与特定实例脱钩。

注意:全局访问常量状态并不是什么大事。

以下是谷歌工程师所做的一个很好的话题:

http://www.youtube.com/watch?v=-FRm3VPhseI

Singleton模式looks像它一样是最容易实现的模式之一(当您第一次看到设计模式时)。这是相对容易做到的,但它的实现有几个问题(所有这些都是特定于语言的)。但是学习辛格尔顿( Singleton's )最难的部分是:学习什么时候使用它们(这应该很少(大多数人永远不会争论,但我发现很难说服我自己,我永远不会使用单例(我认为我有过几次错误,但这就是我们学习的方式))。

票数 27
EN

Software Engineering用户

发布于 2011-01-16 19:19:42

对于简单的全局变量来说,单例惟一有用的情况是需要全局访问,而拥有多个实例是一个错误。有些人使用单例来表示日志文件,但是拥有多个日志类实例并不是错误(例如,为了某种特定的目的,您可能希望记录到单独的文件:如果您的日志类是单例,那现在是不可能的)。

注意,这不仅仅是一个需要全局访问的问题。这是全局访问,有多个实例是错误的。

通常,如果您需要全局访问,一个全局变量就足够了(人们不喜欢全局变量,但是单例肯定不是过度使用全局变量的解决方案)。一种更好的方法通常是使用面向方面的编程来代替单变量和全局变量。

票数 13
EN

Software Engineering用户

发布于 2011-01-16 20:26:44

您可能会发现这很有帮助:https://stackoverflow.com/questions/2765060/stateless-singleton-vs-static-methods/2765251#2765251

概括地说:

  • 与静态类相比,实际单例的优点是,单例可以实现接口。
  • 单例的目的不是授予对值的全局访问,而是控制类型的实例化。

格列茨

back2dos

票数 5
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/37249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档