c#在哪种情况下人们会选择单例设计模式
下面是一个单例设计模式代码示例。当人们设计singleton类时,我只是提出了一些新的场景……请提及一些场景 我经常看到人们使用单例设计模式方法开发记录器,但为什么需要这样做,因为我们可以在不使用单例设计模式的情况下开发记录器 如果有人知道真正的原因,请与我分享。谢谢c#在哪种情况下人们会选择单例设计模式,c#,C#,下面是一个单例设计模式代码示例。当人们设计singleton类时,我只是提出了一些新的场景……请提及一些场景 我经常看到人们使用单例设计模式方法开发记录器,但为什么需要这样做,因为我们可以在不使用单例设计模式的情况下开发记录器 如果有人知道真正的原因,请与我分享。谢谢 public sealed class Singleton { Singleton() { } private static readonly object padlock = new objec
public sealed class Singleton
{
Singleton()
{
}
private static readonly object padlock = new object();
private static Singleton instance = null;
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (padlock)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}
它归结为应用程序的需要,即是否需要单例。通常,您希望避免使用该模式,因为通常有实例级的方法来完成跨线程共享数据等任务,尽管这样做可能需要编写更复杂的代码 一个例子是跨进程缓存数据库查找。任何实现都是特定于需求应用程序的,尽管它可能不一定是必需的,也就是说,通常有其他方法来实现相同的目标
在SE的软件工程网站上有一个更好的解释,解释了为什么这样做。Singleton是因为构建对象的成本很高,但是在今天的大多数应用程序架构中,没有太多的空间来容纳四人帮书中描述的Singleton模式。正如您所描述的,单例的“经典”实现使用了静态方法,而静态方法反过来又成为一个主要的依赖磁铁,使得完成IoC变得更加困难。我想不出今天我会使用一个专门编码为单例的对象,而不是传递一个碰巧是唯一构造的对象
今天,我实现Singleton模式所代表的目标的方法是配置我的IoC容器,以便在解析依赖项时仅创建该特定类型的单个实例。仅供新手参考:上面的实现是线程安全Singleton模式的一个示例。有不同的方法做任何事都有可能。你永远不需要使用singleton模式,但有些人选择使用。我个人认为这是因为你只需要一个logger实例,但同样没有具体的原因说明为什么singleton高于其他任何东西我们在数据库中定义了一些查找表。它们很少改变,当应用程序转到webservice,webservice查询数据库时,会有一点开销。因此,我们将它们作为单例集合加载,并提供一个选项,可根据需要刷新所有这些集合。如前所述,还有其他方法可以做同样的事情,但这是一个实际的单例用例。没有人提到使用单例模式的类对于单元测试来说通常是可怕的,但事实确实如此。