UFL1——单例模式基类
UFL1——单例模式基类
前置知识点
大体知识体系
- C#相关知识点(C#四部曲)
细节知识点
- 面向对象(C#四部曲C#核心中)
- 静态、单例模式相关知识(C#四部曲之C#核心中)
- 泛型、泛型约束相关知识点(C#四部曲之C#进阶中)
单例模式
一般的单例模式差不多都会写类似于下面的这种形式,区别几乎只在于类名,该模式的特点是
- 单例模式的类只能有一个实例化对象,由该类的静态私有变量
instance
装载,外部不能实例化单例模式的类 - 单例模式类只会在程序启动时,或者第一次调用静态
Instance
属性时才会自己实例化一个对象,
而静态Instance
属性是外部唯一能够调用单例模式唯一类对象的接口 - 而由于单例模式类的构造函数是私有的,外部无法实例化一个对象,它保证了单例模式类对象是唯一的
单例模式的类可以在外部随时调用该类的Instance
属性来调用该类的唯一对象
1 | public class GameManager |
为什么要写单例模式基类
用面向对象的思想避免代码冗余(多余、重复)
即让使用单例模式的类直接继承该基类来复用静态私有变量的声明以及单例调用接口代码
1 | public class TestMgr |
单例模式与静态类的区别
静态类也是只能用类名调用且不能实例化的类,它和单例模式类有什么区别呢?
- 静态类的方法适合纯数据处理,因为不依赖其它对象实例,写入参数就可以,但这也是它的限制,方法里是不可调用它的实例对象的
- 单例模式类,实际在第一次调用时它会在内部创建了实例化对象,之后都是在调用这个唯一的实例
- 静态类不能过多,静态类将会一开始就需要将方法逻辑编译成本机代码(win,mac,linux)
这就会在程序启动时形成过多cpu计算,而实例是在实例方法第一次被调用时才编译成本机代码(只编译一次)。 - 所以应该尽量使用实例,有更好的内存管理gc释放,也会分散编译方法体的本机代码
单例模式基类实现
- 不继承MonoBehaviour的单例模式基类
- 继承MonoBehaviour的单例模式基类
- 安全性问题解决
- “饿汉”与“懒汉”单例模式
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!