简述:单例模式顾名思义在一个程序运行的全部阶段,其实例化对象都只有一个,实际环境的运用包括window操作系统中的任务管理器、程序中的错误日志处理对象等。
单例模式具体实现分为“饥汉模式”、“饱汉模式”。
实现前提:私有化构造函数、屏蔽对外开放的实例化构造函数。
“饥汉模式”:(又名懒汉模式,使用的时候再实例化)
public class Global { /// <summary> /// 私有化构造函数 /// </summary> private Global () { } /// <summary> /// 用于存储单例对象. /// </summary> private static Global _single = null; /// <summary> /// 设定. /// </summary> /// <value>The single.</value> public static Global Single { get{ if (_single == null) _single = new Global (); return _single; } } }
“饱汉模式”:(不管用不用,先实例化了再说)
public class FreeGlobal { /// <summary> /// 私有化构造函数 /// </summary> private FreeGlobal () { } /// <summary> /// 用于存储单例对象. /// </summary> private static FreeGlobal _single = new FreeGlobal(); /// <summary> /// 设定. /// </summary> /// <value>The single.</value> public static FreeGlobal Single { get{ return _single; } } }
测试结果:
线程安全设定:
在多线程的情况下,可能会出现多个实例的情况,所以可以通过线程锁进行处理。
public class FreeGlobal { private FreeGlobal () { } private static FreeGlobal _single = new FreeGlobal(); /// <summary> /// 用于线程锁定对象. /// </summary> private static object obj = new object (); public static FreeGlobal Single { get{ lock (obj) {//锁定 return _single; } } } }
单例模式的变异版本:
public class SingleInCSharp { private SingleInCSharp(){} public static SingleInCSharp Single = new SingleInCSharp(); }
当然了,实现方式有很多种,但是最核心的思想就是“私有化构造函数”。
个人理解,如有偏颇,敬请指教!