《游戏编程模式》笔记——单例模式
单例模式
单例模式就是说一个类有且只有一个对象。
这个类会把构造函数私有化,自己创建自己的实例,并提供给外部。
静态的instance保存了类的实例,私有的构造函数保证了实例的唯一,Instance提供给了外部任意位置访问实例的方式。
好处
节省了一点性能,如果没有人用,就不会创建实例。
只在运行时实例化,相比静态成员在main函数运行前的自动初始化,懒汉模式的延迟加载都会在运行后尽可能晚的初始化,使单例成员之间的相互依赖更加可靠。
可以被继承,这使得单例模式的使用方式更加灵活一些。除了作为父类,让子类更容易实现单例外,也可以在父类调用实例的时候根据情况返回不同的子类对象。
坏处
增加耦合,因为随处都可以调用,单例类的使用可能会遍布整个项目的代码。
懒加载可能会导致在不想要的地方增加性能消耗,懒加载的实例化的时间点是未知的,可能会在正在进行大量计算的时间点进行初始化,加重了性能消耗。
最后
不要滥用单例模式,考虑清楚是否需要单例类,有可能只需要静态函数就能解决的问题,就不要做成单例模式了。
也可以尝试合并单例类,将一些小的管理类归属到一个大的管理类中。
Mono单例
这是一个简单的MonoBehaviour单例的父类。
私有化instance并且在Awake阶段判断是否已有实例,如果没有实例,第一个实例就成为这个单例的唯一实例,并且场景切换时不销毁。后续重复创建的实例都会销毁自己保证实例的唯一性。
参考
《游戏编程模式》

