参考:head first 设计模式
应用场景:
确保一个类只有一个实例,并自行创建,并提供一个全局的唯一入口点。
比如在办事大厅或医院中,我们需要给显示屏发信息,通知某位病人去取药(取号)或就诊(办事),
发信息的这个模块就可以定义为单例
图例
特点
确保一个类只有一个实例,并自行创建,并提供一个全局的唯一入口点
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignPattern
{
//调用方
public class SingletonClient
{
public void main()
{
Singleton ins = Singleton.GetSinstance();
}
}
/// <summary>
/// 单例模式
/// </summary>
public class Singleton
{
//实现方式1
//懒汉式,只有在调用的时候才去创建实例
//实现单个实例,全局唯一入口
//注意双重锁机制 避免多线程同时创建
private static Singleton singletonInstance;
//确保同步
private static readonly object locker = new object();
private Singleton()
{
}
public static Singleton GetSinstance()
{
if (singletonInstance == null)
{
lock (locker)
{
if (singletonInstance == null)
{
singletonInstance = new Singleton();
}
}
}
return singletonInstance;
}
//实现方式2
//饿汉式:类一加载就去创建实例,确保在调用前存在
//private static Singleton Instance = new Singleton();
}
}