单例模式
确保一个类在全局中只有一个实例,并且提供一个访问它的方 式。
适合的场景
配置管理器(ConfigManager)
游戏中的全局状态(GameManager)
UI控制(UIManager)
音效/音乐控制(SoundManager)
这些东西通常全局只需要一个就够了,
不但避免浪费资源,也让逻辑更集中、易管理。
反之,如果每次都创建一个新实例,很快就会逻辑混乱
基本结构
类有一个私有的静态变量保存唯一实例。
构造函数是私有的,外部不能直接
new。提供一个公开的静态方法或属性来获取实例(通常叫
Instance)。
示例
csharp
public class Singleton
{
// 静态只读实例
private static readonly Singleton _instance = new Singleton();
// 构造函数私有,防止外部new
private Singleton()
{
Console.WriteLine("构造了一个Singleton!");
}
// 提供全局访问点
public static Singleton Instance => _instance;
public void DoSomething()
{
Console.WriteLine("单例在执行操作");
}
}
// 使用
Singleton.Instance.DoSomething();注:这并不是单例模式在 Godot 中的最佳实践, 在 Godot 中我们通常使用 Autoload,更符合引擎习惯
(详见 实战系列-游戏编程设计模式 章节)
gdscript
class Singleton:
static var instance: Singleton:
get: return _instance
static var _instance: Singleton = new()
func do_something():
print("正在执行操作")
# 使用
func _ready():
Singleton.instance.do_something()这种方式更接近传统OOP的写法,但在 Godot 中通常不会这么搞,
因为 Autoload 更加方便灵活