1、单例
它是在整个项目中唯一存在的实例。
2、设置单例的目的
确保一个类只有一个实例,并提供一个全局访问点。
通常用于管理跨多个场景或组件的全局状态或行为
3、实例
public static UIManager Instance { get; private set; }
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(this);
}
else
{
Instance = this;
}
}
4、改进的单例
public static UIManager Instance { get; private set; }
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
}
else
{
Instance = this;
}
}
private void OnDestroy()
{
if (Instance == this)
{
Instance = null;
}
}
private UIManager()
{
// 私有构造函数,防止通过其他方法创建实例
}
5、AI的介绍
一般来说,单例模式有多种实现方式,而选择使用哪种方式取决于你的需求和项目的架构。以下介绍了几种常见的单例实现方式:
(1) 饿汉式单例:在类加载时就创建实例,保证了线程安全,但可能会造成资源浪费。
public class Singleton
{
private static Singleton instance = new Singleton();
private Singleton() { }
public static Singleton Instance { get { return instance; } }
}
(2) 懒汉式单例:在第一次调用获取实例的方法时才创建实例,需要考虑线程安全的问题。
public class Singleton
{
private static Singleton instance = null;
private static readonly object lockObject = new object();
private Singleton() { }
public static Singleton Instance
{
get
{
lock (lockObject)
{
if (instance == null)
{
instance = new Singleton();
}
}
return instance;
}
}
}
(3) 使用静态初始化器:利用类的静态初始化器实现单例,可以保证线程安全,且在使用时才创建实例。
public class Singleton
{
private static readonly Singleton instance = new Singleton();
private Singleton() { }
public static Singleton Instance { get { return instance; } }
}
在选择哪种单例实现方式时,可以根据你的需求和项目的具体情况来决定。需要考虑的因素包括线程安全性、延迟加载、资源利用等等。如果不确定使用哪种方式,可以根据具体情况进行评估和测试,并选择最适合你项目需求的方式。