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()"); } }