问题描述
singleton pattern 是 GoF 的 模式书,但它最近似乎被开发者界孤立了.我仍然使用相当多的单例,特别是对于 工厂类,而你必须是对多线程问题有点小心(实际上就像任何类一样),我不明白为什么它们如此糟糕.
Stack Overflow 似乎特别假设每个人都同意单身人士是邪恶的.为什么?
推荐答案
引自 Brian Button:
问题描述
The singleton pattern is a fully paid up member of the GoF's patterns book, but it lately seems rather orphaned by the developer world. I still use quite a lot of singletons, especially for factory classes, and while you have to be a bit careful about multithreading issues (like any class actually), I fail to see why they are so awful.
Stack Overflow especially seems to assume that everyone agrees that Singletons are evil. Why?
推荐答案
Paraphrased from Brian Button:
They are generally used as a global instance, why is that so bad? Because you hide the dependencies of your application in your code, instead of exposing them through the interfaces. Making something global to avoid passing it around is a code smell.
They violate the single responsibility principle: by virtue of the fact that they control their own creation and lifecycle.
They inherently cause code to be tightly coupled. This makes faking them out under test rather difficult in many cases.
They carry state around for the lifetime of the application. Another hit to testing since you can end up with a situation where tests need to be ordered which is a big no no for unit tests. Why? Because each unit test should be independent from the other.