gpt4 book ai didi

c# - 单例模式在现实世界中有哪些应用?

转载 作者:可可西里 更新时间:2023-11-01 03:13:44 25 4
gpt4 key购买 nike

重复

On design patterns: When should I use the singleton?

class Singleton
{
private static Singleton instance;

private Singleton() {}

public static Singleton Instance
{
get
{
if (instance == null)
instance = new Singleton();

return instance;
}
}
}

最佳答案

简单。单例做什么?

  • 它提供对对象实例的全局访问,并且
  • 它保证永远不会创建超过一个该类型的实例。

因此,当您需要两者这些东西时,您可以使用单例。

这很少见。一般来说,全局变量是不好的。我们倾向于尽可能避免使用它们。围绕“如果存在多个实例,则为错误”的假设构建应用程序是危险的,因为您通常会发现该假设不成立。出于缓存目的,您可能希望能够在本地创建多个实例。也许事实证明您需要多个数据库、多个日志,或者线程性能可能需要您为每个线程提供自己的实例。

在任何情况下,您都不需要强制执行“可能只存在一个实例”的假设。如果您只需要一个实例,只需创建一个实例即可。但是让构造函数公开可见,以便如果有必要可以创建更多实例。

换句话说,单例提供的两个特性实际上都是负面的。一般而言,我们不希望我们的数据在全局范围内可见,我们也不希望无缘无故地剥夺灵 active 。

如果您确实需要单例提供的其中一项功能,请实现该功能,而不要实现其他功能。如果您需要某些东西可以在全局范围内访问,请将其设为全局范围。不是单例狗。如果您确实需要强制只存在一个实例(我想不出任何您想要这样做的合理情况),那么就在没有全局可见性的情况下实现它。

我见过的唯一真实世界的单例应用是“一位架构师阅读了 GoF 书,并决定在任何地方都塞满设计模式。”,或者“一些 80 年代的程序员不习惯整个“面向对象”的事情,并希望按过程编码,这意味着将数据存储为全局变量。单例听起来像是一种“面向对象”的方式来创建全局变量而不会被大喊大叫。

关键点在于,单例混合了两种非常不同且极少需要的职责。通常,您希望至多任何给定对象中的其中一个。

关于c# - 单例模式在现实世界中有哪些应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/733842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com