下面我将详细讲解“.NET c# 单体模式(Singleton)”的完整攻略。
什么是单体模式?
单体模式,也被称为单例模式,是一种创建型设计模式。它在应用程序需要访问全局对象时使用。单体模式确保整个应用程序中只存在一个对象实例并提供全局访问点访问该实例。
单体模式的实现方式
在 .NET c# 中,单体模式的实现方式如下:
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}
以上代码中,Singleton 类是一个私有的构造函数和一个名为 Instance 的公共静态访问点。
Instance 属性使用懒初始化(lazy initialization)来创建 Singleton 实例。它在第一次调用时创建实例。如果创建成功则返回现有的实例,否则创建一个新实例。
singleton 实例使用 volatile 关键字来确保变量在多线程环境中的可见性,并使用 lock 代码块来保护创建 singleton 实例的代码部分,以免在多线程环境中重复创建实例。
单体模式的应用场景
单体模式应该只用于应用程序中的需要全局访问的对象。
以下是一些单体模式的应用:
-
数据库连接器
-
日志记录器
-
线程池
单体模式的示例
示例 1:
using System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}
public class Program
{
static void Main(string[] args)
{
Singleton s1 = Singleton.Instance;
Singleton s2 = Singleton.Instance;
if (s1 == s2)
{
Console.WriteLine("s1 and s2 are the same instance");
}
else
{
Console.WriteLine("s1 and s2 are different instances");
}
}
}
在以上示例中,我们创建了一个 Singleton 对象并使用 Instance 属性访问,并将 s1 和 s2 变量赋值为 Singleton 对象,然后检查这两个变量是否引用同一个 Singleton 实例。这两个变量将引用 Singleton 类的唯一实例,并打印它们是否是同一个实例。
示例 2:
using System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() { }
public void Log(string message)
{
Console.WriteLine(message);
}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}
public class Program
{
static void Main(string[] args)
{
Singleton s = Singleton.Instance;
s.Log("Hello, Singleton Pattern!");
}
}
在以上示例中,我们添加了 Log 方法到 Singleton 类中,它将打印消息到控制台。我们通过 Singleton.Instance 属性访问 Singleton 实例并使用 Log 方法输出消息。
总结
单体模式可以确保你的应用程序中只存在一个对象实例,这适用于需要全局访问的对象。在 .NET c# 中,我们可以使用懒初始化并使用锁和 volatile 关键字来实现单体模式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.NET c# 单体模式(Singleton) - Python技术站