101 lines
2.5 KiB
C#
101 lines
2.5 KiB
C#
//==================================================================================
|
||
//==================================================================================
|
||
|
||
//----------------------------------------------------------------------------
|
||
//----------------------------------------------------------------------------
|
||
using UnityEngine;
|
||
/// 单件类,非MonoBehaviour类型继承(线程安全)
|
||
/// @单件实例必须在代码中显式创建, GetInstance()不创建实例
|
||
/// @bhy
|
||
/// @2019.01.03
|
||
/// 非MonoBehaviour类型的单件辅助基类,利用C#的语法性质简化单件类的定义和使用
|
||
/// @T : 单件子类型
|
||
public class Singleton<T> where T : class, new()
|
||
{
|
||
//单件子类实例
|
||
private static T s_instance;
|
||
|
||
protected Singleton()
|
||
{
|
||
|
||
}
|
||
|
||
//--------------------------------------
|
||
/// 创建单件实例
|
||
//--------------------------------------
|
||
public static void CreateInstance()
|
||
{
|
||
if (s_instance == null)
|
||
{
|
||
s_instance = new T();
|
||
|
||
(s_instance as Singleton<T>).Init();
|
||
}
|
||
}
|
||
|
||
//--------------------------------------
|
||
/// 删除单件实例
|
||
//--------------------------------------
|
||
public static void DestroyInstance()
|
||
{
|
||
if (s_instance != null)
|
||
{
|
||
(s_instance as Singleton<T>).UnInit();
|
||
s_instance = null;
|
||
}
|
||
}
|
||
|
||
public static T Instance
|
||
{
|
||
get
|
||
{
|
||
if (s_instance == null)
|
||
{
|
||
CreateInstance();
|
||
}
|
||
|
||
return s_instance;
|
||
}
|
||
}
|
||
|
||
|
||
//--------------------------------------
|
||
/// 返回单件实例
|
||
//--------------------------------------
|
||
public static T GetInstance()
|
||
{
|
||
if (s_instance == null)
|
||
{
|
||
CreateInstance();
|
||
}
|
||
|
||
return s_instance;
|
||
}
|
||
|
||
//--------------------------------------
|
||
/// 是否被实例化
|
||
//--------------------------------------
|
||
public static bool HasInstance()
|
||
{
|
||
return (s_instance != null);
|
||
}
|
||
|
||
//--------------------------------------
|
||
/// 初始化
|
||
/// @需要在派生类中实现
|
||
//--------------------------------------
|
||
public virtual void Init()
|
||
{
|
||
|
||
}
|
||
|
||
//--------------------------------------
|
||
/// 反初始化
|
||
/// @需要在派生类中实现
|
||
//--------------------------------------
|
||
public virtual void UnInit()
|
||
{
|
||
|
||
}
|
||
}
|