|
|
1
16
看看Steve Yegge的博客- Singleton Considered Stupid |
|
2
6
如果它们只需要创建一次,那就不要求它们是单件的。
如果你是单身 要求 类只有一个实例,并且它是全局可访问的。在你的情况下,仅仅需要一个是不够的。全球是不好的,单身是光荣的全球。 大多数时候,你不需要它们。你会在糟糕的代码中看到很多,这是因为我的心态:我只需要一个,那就意味着我应该成为单身汉!( 错误的 )例如,我已经完成了迄今为止最强大的游戏引擎的技术设计。它有两个单例,用于内存和线程。一个非常大的项目,我只有两个! 更多的上下文将帮助我们为您提供更好的信息。 |
|
|
3
5
我建议你看看谷歌的Mi_ko Hevery所做的一些视频和文章。第一个视频: "Clean Code Talks: Global State and Singletons" 和 his blog . 一般的观点是,在一些罕见的情况下(例如日志记录),单例是可以的,但在大多数其他情况下,您希望使用依赖注入。单例使测试代码变得更加困难,并且它们隐藏了依赖项,因此您的类不能单独容易地实例化。 |
|
|
4
4
单子有一些问题——它们很难测试,很难替换,也很难扩展。通常有更好的方法。 |
|
|
5
3
我最喜欢的关于单身的文章之一是 Singletons are Pathological Liars 作者:Mi_ko Hevery。本质上,他们鼓励“隐藏”的行为,这是非常难以学习和测试的。 |
|
|
6
1
有些项目实际上无法避免使用globals。所有类型的服务定位器或依赖注入框架仍然依赖对象的全局(不总是静态变量,但总是某种类型的全局)存储。 然而,单件是一个问题的迹象:
|
|
|
7
1
单件有效地说是全球状态。如果你要创造大量的单件物品,你就要创造大量的全球状态,只有在不一定看起来像全球状态。
这使得很难做诸如构建单元测试、提供模拟类和重用代码之类的事情,因为它非常容易
将当前状态与函数耦合。即函数
正确地构建线程安全的单例也是有问题的。 单件可以很好地协调对资源的访问,特别是对于状态不太好、构建成本很高的资源。 你为什么认为你需要 太多了 单身汉?如果你问你的问题域和你遇到的问题,你可能会得到更好的回答。 |
|
|
8
0
在编程中,没有白银弹。使每个类都成为一个单独的类并不会神奇地使您的代码“更好”。单件是一个工具,解决了一个具体的问题,我研究了更多关于单件。 |
|
|
9
0
在项目中使用单例模式应该是一个经过深思熟虑和仔细设计的决定,因为它是一个单向跟踪,很少有回溯的空间。实际上,我在我的一个项目中,在多线程环境中使用它作为商业产品,并面临许多问题。但这并不意味着这是一个不可触及的模式。关键是,任何可以用单例实现的东西都可以不用它实现,而且麻烦和复杂性也更少。有关更多信息,您可以跟踪 this question 几个月前我问过。它有有趣的链接和对单例模式的洞察 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |