什么是单例模式?
确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
首先要建立这个实例:
class Factory
{
public string Name { get; set; }
public int Type { get; set; }
//构造是私有的
private Factory()
{
Name = "123";
Type = 1;
}
//私有静态类
private static class HolderClass
{
//实例化是公开静态的
public static Factory Instance = new Factory();
}
//公开静态方法
public static Factory GetInstance()
{
//把私有暴露
return HolderClass.Instance;
}
}
用个简单的console app 运行一下:
class Program
{
static void Main(string[] args)
{
//第一次调用
var factory = Factory.GetInstance();
//第二次调用
var factoryTwo= Factory.GetInstance();
Console.WriteLine(factory.Name);
Console.WriteLine(factory.Type);
//对比
Console.WriteLine(factory.Equals(factoryTwo));
}
}
我们看一下结果:
从结果看,把实例中的属性都成功输出了,对比两个实例也是同一个,说明两次调用的实例是同一个。
单例模式还分两种形式:饿汉模式和懒汉模式
饿汉可以理解为上来就要吃:也就是上面演示的,第一次拿到的实例就是默认的new Factory()
而懒汉模式是第一次拿实例时需要去new 一次:
class Factory
{
public string Name { get; set; }
public int Type { get; set; }
private Factory()
{
Name = "123";
Type = 1;
}
private static class HolderClass
{
//懒汉是上来就给空,什么时候用,什么时候去new
public static Factory Instance = null;
}
public static Factory GetInstance()
{
if (HolderClass.Instance == null)
{
HolderClass.Instance = new Factory();
}
return HolderClass.Instance;
}
}
我们看到运行结果是一样的。