发布于 2011-01-16 18:56:17
它与全局变量有相同的问题。
它为您提供了对可变状态的全局访问。
任何使用Singleton的东西现在都紧密耦合到它上。
尽量避免紧耦合。这使得代码很难更新。很难测试。
如果您的选择是Singleton或全局变量。至少Singleton提供了延迟初始化。
但通常最好避免全局可访问的可变状态,并通过参数或构造函数将所有依赖项传递给代码。这使您的代码与特定实例脱钩。
注意:全局访问常量状态并不是什么大事。
以下是谷歌工程师所做的一个很好的话题:
http://www.youtube.com/watch?v=-FRm3VPhseI
Singleton模式looks像它一样是最容易实现的模式之一(当您第一次看到设计模式时)。这是相对容易做到的,但它的实现有几个问题(所有这些都是特定于语言的)。但是学习辛格尔顿( Singleton's )最难的部分是:学习什么时候使用它们(这应该很少(大多数人永远不会争论,但我发现很难说服我自己,我永远不会使用单例(我认为我有过几次错误,但这就是我们学习的方式))。
发布于 2011-01-16 19:19:42
对于简单的全局变量来说,单例惟一有用的情况是需要全局访问,而拥有多个实例是一个错误。有些人使用单例来表示日志文件,但是拥有多个日志类实例并不是错误(例如,为了某种特定的目的,您可能希望记录到单独的文件:如果您的日志类是单例,那现在是不可能的)。
注意,这不仅仅是一个需要全局访问的问题。这是全局访问,有多个实例是错误的。
通常,如果您需要全局访问,一个全局变量就足够了(人们不喜欢全局变量,但是单例肯定不是过度使用全局变量的解决方案)。一种更好的方法通常是使用面向方面的编程来代替单变量和全局变量。
发布于 2011-01-16 20:26:44
您可能会发现这很有帮助:https://stackoverflow.com/questions/2765060/stateless-singleton-vs-static-methods/2765251#2765251
概括地说:
格列茨
back2dos
https://softwareengineering.stackexchange.com/questions/37249
复制相似问题