Unity-单例模式
前言
对于某些特殊的类,我们希望 在整个程序的生命周期只创建一个该类的对象 ,或是希望 在其他类没有持有该类的引用,就可以调用该类中的函数,我们就需要将这个类写成 单例模式
单例的简单实现
public class Test()
{
pubic abstract Test Instance;//创建程序中该类的唯一一个对象
private void Awake()//在程序启动时,直接创建一个该类的对象
{
if(Instance!=null)//如果已经创建了一个变量,便将该变量删除
{
Destroy(gameObject);
}
Instance = this;
}
}
泛型单例
为什么需要泛型单例
在通常的游戏制作中,我们会创建许多的 Manager 来管理我们的游戏,如果每创建一个 Manager 都要重新写一遍单例会非常麻烦,因此就需要 泛型单例。
代码实现
泛型单例,顾名思义就是事先不知道单例的类型,其类型取决于继承该泛型父类的子类
代码如下:
public class Singleton<T> : MonoBehaviour where T :Singleton<T> //where确定继承该父类的是什么类型的子类
{
private static T instance;
//用于获取单例的属性
public static T Instance
{
get { return instance;}
}
//程序启动时调用,给单例唯一变量赋值
protected virtual void Awake()
{
if(instance != null)
{
Destroy(gameObject);
}
else
{
instance = (T)this;
}
}
//判断单例是否已经被创建的属性
public static bool IsInitialized
{
get { return instance != null;}
}
//销毁函数
protected void OnDestroy()
{
if(instance == this)
{
instance = null;
}
}
}
更多可能
如果我们在一个项目中 过度使用单例模式,就会造成该项目的 耦合性非常高,一个单例中的某个变量,可能同时被十几个对象引用,导致牵一发而动全身,使得项目 难以维护。我们急需一种方法,能够提供单例模式的功能,但又没有单例模式如此之高的耦合度。
分析单例模式的功能:它能够让我们在任何地方读取某个对象的信息,但前提是我们必须持有这个对象的引用。那么有没有什么方法可以不持有该对象的引用,但仍然可以读取该对象的信息呢?
这时候我们就可以使用设计模式中的 观察者模式。
参考资料
观察者模式 - AshScops - 博客园 (cnblogs.com)
标签:创建,模式,instance,Unity,单例,泛型,public From: https://www.cnblogs.com/MMMMrD/p/17832323.html