单例模式(Singleton):使一个类在程序运行中有且只有一个实例
单例模式优点
1.提供全局唯一访问点:确保只有一个实例存在,可以通过全局访问点获取该实例。
2.节省系统资源消耗:在需要频繁使用的对象上使用单例模式可以减少内存开销,因为只需创建一个实例就可重复使用。
3.简化对象管理:单例模式不需要手动创建与销毁对象,只需引用单例对象即可。
注意事项
1.单例模式存在全局状态,可能会导致程序耦合性增加,导致后续难以维护。
2.单例模式通常在程序开始运行时创建,并且常驻内存,不适合需要动态加载或卸载对象的场景,且不受GC的掌控,需手动卸载。
3.尽量避免为一个单例添加过多功能,否则会导致代码复杂度过高,难以修改和维护。
单例模板——继承MonoBehaviour
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T:Component
{
private static T _instance = null;
public static T Instance
{
get
{
//若单例从未被创建
if(_instance == null)
{
_instance = FindObjectOfType(typeof(T)) as T;
//场景中未找到该单例,则新创建一个挂载单例脚本的物体
if(_instance == null)
{
GameObject obj = new GameObject();
_instance = (T)obj.AddComponent<T>();
obj.hideFlags = HideFlags.DontSave;
obj.name = typeof(T).Name;
}
}
return _instance;
}
}
//初始化
public virtual void Awake()
{
DontDestroyOnLoad(gameObject);
if(_instance == null)
{
_instance = this as T;
}
else
{
Destroy(this.gameObject);
}
}
}