这个问题已经在这里有了答案:




已关闭8年。






我最近听说Singleton是一种反模式。我知道这与使类单例成为一个事实就像使该唯一实例成为全局变量有关,但它所做的还远远不止于此(限制该对象的实例数量,管理实例化等)。
为什么将Singleton确切地视为反模式?还有哪些替代方案?

最佳答案

为了帮助回答,以下是有关反模式注释的更多信息:



来自:http://en.wikipedia.org/wiki/Singleton_pattern

有关更多信息,请查看:https://www.michaelsafyan.com/tech/design/patterns/singleton

这是上面博客的一个伟大结局:



好的,因此,在本段中很好地描述了它是反模式的原因,并且正如作者所言,它将您的代码紧密地耦合到了单例。

如果发现要使用单例,则可能要考虑设计,但是有时候它很有用。

例如,一旦我不得不编写一个最多可以有一个数据库连接的应用程序来处理成千上万的请求。因此,单例是有意义的,因为我的资源仅限于只有一个实例。

但是,通常,这用于简化代码,而无需考虑将要引入的困难。

例如,这也适用于静态类,如果您进行单元测试或具有并发性,则一个请求的状态将更改状态,这可能会导致问题,因为调用实例的类可能会假设状态为原样。预期。

我认为,挑战使用的最佳方法是考虑程序是否为多线程,如何处理它,而一次执行多个测试的情况下,一种简单的方法就是对它进行单元测试。

如果发现仍然需要它,请使用它,但要意识到以后会遇到的问题。

10-08 07:29