Unity-单例模式
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;
}
}
}
更多可能
如果我们在一个项目中 过度使用单例模式,就会造成该项目的 耦合性非常高,一个单例中的某个变量,可能同时被十几个对象引用,导致牵一发而动全身,使得项目 难以维护。我们急需一种方法,能够提供单例模式的功能,但又没有单例模式如此之高的耦合度。
分析单例模式的功能:它能够让我们在任何地方读取某个对象的信息,但前提是我们必须持有这个对象的引用。那么有没有什么方法可以不持有该对象的引用,但仍然可以读取该对象的信息呢?
这时候我们就可以使用设计模式中的 观察者模式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)