1)单例模式的实现
①定义private static 实例。
②定义private构造函数,组织外部通过构造函数构造对象。
③定义public static Get方法。
④多线程时,Get方法中采用 2-if-1-lock 写法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignMode
{
public class SingletonClass
{
private static SingletonClass instance;
private static readonly object locker = new object();
private SingletonClass()
{
}
static public SingletonClass GetSingletonInstance()
{
if (instance == null)
{
lock (locker)
{
if (instance == null)
{
instance = new SingletonClass();
}
}
}
return instance;
}
}
}
2)测试
static void TestSingleton()
{
SingletonClass single1 = SingletonClass.GetSingletonInstance();
SingletonClass single2 = SingletonClass.GetSingletonInstance();
if (single1 == single2)
{
Console.WriteLine("equal");
}
}
3)何时使用单例模式。
例如创建对象特别耗资源(时间,内存),希望只创建1次,之后拿来就用。
4)其他实现方法
①定义private构造函数
②定义Static 变量,该变量在类第一次使用时初始化,多线程时不需要锁。
public class SingletonPatternStatic { public static SingletonPatternStatic Instance = new SingletonPatternStatic(); private SingletonPatternStatic() { Thread.Sleep(2000); Console.WriteLine("SingletonPatternStatic()"); } }