单例专精(五)单例复习与补充
Singleton的使用
- Singleton
- 继承
- 私有构造
- MonoSingleton
- 继承即可
- SingletonProperty
- 实现ISingleton接口
- 在属性器中实现
- MonoSingletonProperty
- 实现ISingleton接口
- 继承MonoBehaviour或其子类
- 在属性器中实现
- MonoSingletonPath
- 支持MonoSingleton与MonoSingletonProperty
单例的最佳实践
- 严格控制对外暴露的API
- 严格控制单例的使用范围
- 模块命名
- 职责尽量少
- 严格控制单例对象的生命周期(创建、初始化、销毁)
设计原理
- ISingleton有两个作用,一个是泛型的约束,一个是提供统一的初始化接口(OnSingletonInit)。
- MonoSingletonPath是为了让单例模块方便管理。
实现套路
- 通过反射创建实例
- Attribute与反射的使用
补充
由于Singleton与SIngletonProperty都需要用到通过反射创建实例的功能,所以把这个功能单独提取出来,放到了SingletonCreator里。本质上是为了减少重复代码。
MonoSingleton与MonoSingletonProperty也需要相同的创建实例方式(创建GameObject),所以也单独写了一个MonoSingletonCreator。
SingletonKit看起来比一般的单例复杂一点,主要是因为它本身有一定的结构。
决定版补充
有了决定版架构,就不用C#单例了,但是Mono还需要使用,Mono的单例的数据部分交给决定版架构管理,既保留Mono单例的便利,又降低了Mono单例的风险。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ATAO2017,阿宅创造奇迹!!