asp.net单例模式

时间:2022-05-22 23:05:55

目的:保证一个类只有一个单一的实例

好处: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;
}
}
}