简单的单例模式
一、在创建类的时候,把构造函数声明为私有方法,不能被外部new,在类的内部实例化。
class Singleton
{
private static int _Count = 0;
private string GreatProperty;
private static Singleton _Instance = new Singleton(); //在类内部实例化
public static Singleton Instance
{
get
{
return _Instance; //外部只能获取_Instance的引用,所以
}
}
private Singleton()
{
_Count += 1;
GreatProperty = $"Singleton created x{_Count}";//查看该类被实例化了几次
Console.WriteLine(GreatProperty);
}
}
或者用更简洁的方式:
class Singleton
{
private static int _Count = 0;
private string GreatProperty;
private static Singleton _Instance = new Singleton(); //在类内部实例化
public static Singleton Instance => _Instance;
private Singleton()
{
_Count += 1;
GreatProperty = $"Singleton created x{_Count}";//查看该类被实例化了几次
Console.WriteLine(GreatProperty);
}
}
示例:
namespace SingletonSimple
{
class Program
{
static void Main(string[] args)
{
var test1 = Singleton.Instance;
var test2 = Singleton.Instance;
var test3 = Singleton.Instance;
var test4 = Singleton.Instance;
Console.Read();
}
}
class Singleton
{
private static int _Count = 0;
private string GreatProperty;
private static Singleton _Instance = new Singleton();
public static Singleton Instance => _Instance;
private Singleton()
{
_Count += 1;
GreatProperty = $"Singleton created x{_Count}";
Console.WriteLine(GreatProperty);
}
public void Work()
{
Console.WriteLine("Hello World");
}
}
}
输出结果:
由此可见,只被初始化了一次,且仅有一个实例存在。