1.懒汉模式
class NormalCase
{
public string Name { get; set; }
//第一步:构造函数私有化: 外界不能用new 进行实例
private NormalCase() { }
//第二步:自行创建一个空实例 static代表只能创建一个实例
private static NormalCase normalCase=null;//赖汉模式
//第三步:提供外界可访问实例的方法
public static NormalCase getInstance()
{
//存在安全:多线程并发:会产生多个实例
if (normalCase==null)
{
normalCase = new NormalCase();
}
return normalCase;
}
public void ShowMsg()
{
Console.WriteLine(Name);
}
}
2.普通类改为单利模式
class NormalCase
{
public string Name { get; set; }
//第一步:构造函数私有化: 外界不能用new 进行实例
private NormalCase() { }
//第二步:自行创建一个实例 static代表只能创建一个实例
private static NormalCase normalCase = new NormalCase();//饿汉模式
//第三步:提供外界可访问实例的方法
public static NormalCase getInstance()
{
return normalCase;
}
public void ShowMsg()
{
Console.WriteLine(Name);
}
}
3.内部静态类实现双重验证
class NormalCase
{
public string Name { get; set; }
//第一步:构造函数私有化: 外界不能用new 进行实例
private NormalCase() { }
//第二步:内部静态类
private static class NormalCaseHelper
{
public static NormalCase normalCase = new NormalCase();
}
//第三步:提供外界可访问实例的方法
public static NormalCase getInstance()
{
return NormalCaseHelper.normalCase;
}
public void ShowMsg()
{
Console.WriteLine(Name);
}
}
4.双重验证
class NormalCase
{
//定义一个锁资源
private static readonly Object obj = new object();
public string Name { get; set; }
//第一步:构造函数私有化: 外界不能用new 进行实例
private NormalCase() { }
//第二步:自行创建一个空实例 static代表只能创建一个实例
private static NormalCase normalCase=null;//赖汉模式
//第三步:提供外界可访问实例的方法
public static NormalCase getInstance()
{
//一重验证
if (normalCase==null)
{
lock(obj)
{
//二重验证
if (normalCase == null)
{
normalCase = new NormalCase();
}
}
}
return normalCase;
}
public void ShowMsg()
{
Console.WriteLine(Name);
}
}
5.控制台输出
class Program
{
static void Main(string[] args)
{
NormalCase nc = NormalCase.getInstance();
nc.Name = "Jack";
nc.ShowMsg();
NormalCase nc1 = NormalCase.getInstance();
nc1.ShowMsg();
Console.Read();
}
}