游戏中很多地方,都需要用到单例模式,虽然单例实现代码不多,但是每一个脚本都重复写的话,也相当的麻烦。
我们可以这样,写一个泛型的父类,来实现这个单例模式,然后其余的只要继承这个父类,自然就有 1 public class HNSingleton<T> where T :class
2 { 3 4 #region 私有变量 5 6 private static T g_instance; // 静态实例句柄 7 private static readonly object g_instanceLock = new object(); // 锁,控制多线程冲突 8 9 #endregion10 11 #region 公开属性12 13 ///14 /// 获取单例15 /// 16 ///即单例模式中所谓的全局唯一公共访问点 17 public static T Instance18 {19 get20 {21 // 此处双重检测,确保多线程无冲突22 if (g_instance == null)23 {24 lock (g_instanceLock)25 {26 if (g_instance == null)27 {28 g_instance = (T)System.Activator.CreateInstance(typeof(T), true);29 System.Console.WriteLine("hnu3d.........unity......create instance:" + g_instance.ToString());30 31 }32 }33 }34 35 36 37 return g_instance;38 }39 }40 41 42 43 #endregion44 45 46 47 #region 销毁对象48 49 public void DelMe()50 {51 // 此处双重检测,确保多线程无冲突52 if (g_instance != null)53 {54 lock (g_instanceLock)55 {56 if (g_instance != null)57 { 58 HNLogger.Log ("..delet---:" + g_instance.ToString());59 g_instance = null;60 }61 }62 }63 64 }65 66 68 }
当其它脚本需要单例模式时,只需要继承该脚本即可实现单例模式了。