Design patterns 是否存在必须使用单例设计模式的场景(除了使用单例之外别无选择)?

Design patterns 是否存在必须使用单例设计模式的场景(除了使用单例之外别无选择)?,design-patterns,Design Patterns,我正在寻找一种无法替代单一模式的情况。 有没有可能出现这种情况?请提供一个您实际面对的示例。我在一个使用pureMVC的应用程序中使用了一个单例(实际上有两个)。我们对这个框架引入的复杂性感到不满(通过mvc层跟踪方法调用变得复杂和分层)。因此,我们使用一个中心单体作为中介,以便更好地将层彼此分离。 我在一个在线足球队商店系统中使用了单身模式。我们将singleton模式应用于ShoppingCart类 每个应用程序实例只需要一个购物车实例。所以单身似乎最适合这种情况TL;DR 单身汉是没有“别

我正在寻找一种无法替代单一模式的情况。

有没有可能出现这种情况?请提供一个您实际面对的示例。

我在一个使用pureMVC的应用程序中使用了一个单例(实际上有两个)。我们对这个框架引入的复杂性感到不满(通过mvc层跟踪方法调用变得复杂和分层)。因此,我们使用一个中心单体作为中介,以便更好地将层彼此分离。 我在一个在线足球队商店系统中使用了单身模式。我们将singleton模式应用于ShoppingCart类

每个应用程序实例只需要一个购物车实例。所以单身似乎最适合这种情况

TL;DR
单身汉是没有“别无选择”的

较长版本
Singleton是一种设计模式,因此它有助于解决问题。 singleton试图解决的问题是,当您只想创建一个类的实例时。为什么要限制实例的数量?原因可能有很多,举几个例子:

  • 创建/维护每个实例都非常昂贵,我们希望节省资源
  • 我们在应用程序中使用来自不同位置的相同资源,我们希望有一个简单的机制来处理它,而不需要进入复杂的解决方案(例如,使用同步)
  • 创建多个对象不仅成本高(#1),而且容易混淆和难以维护,例如连接池
  • 回到你的问题上来,Singleton作为一种设计模式(一种工具),可以在适当的时候使用(就像一把锤子——你可以用它敲打钉子,但你总是可以找到另一种选择,比如一块石头,然后用它敲打同一颗钉子)


    总而言之,没有哪种情况下它绝对是实现某种目标的唯一途径(没有任何选择)。

    这里有一个简单的方法来尝试理解它


    你听说过“全局变量”吗?Singleton是一个类的实例,其行为类似于全局变量。您不希望它被多次实例化。对它的所有访问都必须是对同一个实例的。

    可能的重复我想知道您实际使用该模式的情况?这个链接没有回答这个问题。我认为这个链接在某种程度上回答了这个问题,例如,对于日志记录,您可以使用单例,或者对于某种应用程序范围的服务对象(如数据库连接)。我通常按照单例模式在我的Java项目中创建JDBC连接。单例,意味着您将需要一个,并且只有一个,某个变量的实例。把它想象成一个应用程序缓存。但是我想知道,我们必须在哪里使用单例设计模式?在哪里,你必须只使用类的单个实例。在这种情况下,使用单例将是高效和好的。@MSHossain你可以从中得到帮助,你错过了问题,OP要求出现一种情况,即唯一的解决方案是使用单例。他在要求这样的情景。你给他的是一个关于什么是单身的解释,OP在评论中澄清了这一点:“我想确切地知道,在什么情况下,除了单身别无选择。有什么可能的情况吗?”