目的:保证一个类只有一个单一的实例
好处:1.在资源共享的情况下,避免由多个操作而导致的资源消耗;2.提供可变数目的实例。
标准的单例代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SinglePattern { public class SingleClass { private static SingleClass instance = null; /// <summary> /// 构造函数 /// </summary> protected SingleClass() { } public static SingleClass GetInstance() { if (instance == null) { instance = new SingleClass(); } return instance; } } }
上述是一个标准的单例,如果需要有多个线程访问,可能会产生多个实例,因此,此处需要加上锁,以保证同一时间只能有一个线程访问:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SinglePattern { public class SingleClass { // 静态实例变量 private static SingleClass instance = null; // 互斥锁 private static object objlock = new object(); /// <summary> /// 受保护的构造函数 /// </summary> protected SingleClass() { } public static SingleClass GetInstance() { lock (objlock) { if (instance == null) { instance = new SingleClass(); } return instance; } } } }
优化下,保证一个窗口只能启动一个实例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace SinglePattern { public class SingleClass { // 静态实例变量 private static SingleClass instance = null; /// <summary> /// 受保护的构造函数 /// </summary> protected SingleClass() { } public static SingleClass GetInstance() { // 进程同步 Mutex mutex = new Mutex(); mutex.WaitOne(); if (instance == null) { instance = new SingleClass(); } mutex.Close(); return instance; } } }