UFL1-4——“饿汉”单例模式与“懒汉”单例模式
UFL1-4——“饿汉”单例模式与“懒汉”单例模式
“饿汉”单例模式与“懒汉单例模式”
“懒汉”单例模式
我们在课程中学习的都是“懒汉”单例模式。主要特点是在属性或者方法中进行判空后再实例化。如下:
1 | public class BaseManager<T> where T : class, new() |
这个懒字体现在:这种单例模式只会在第一次使用时才创建事例,而不是应用程序启动时就创建。
有一种“敌不动我不动”,“催一下动一下”的感觉
它的好处也在于此,因为只有当我们代码中需要用到某个单例模式对象时才会去实例化分配内存。
在商业项目中,游戏系统是非常多的,内存开销也是较大的,懒汉模式的延迟实例化特点可以帮助我们在一定程度上缓解一丁点的内存压力。
(因为用才分配,不用不分配)
“饿汉”单例模式
“饿汉”单例模式的特点是:通过静态变量在程序开始时就会声明的特性,使单例对象在在程序开始时就实例化,传统写法如下
1 | public class GameManager |
这个饿字的体现在:这种单例模式在应用程序启动时就创建事例,无论是否使用该事例。
相当于不管我“吃不吃”,我就要创建它,先放在那,一种“饥不择食”的感觉。
虽然看起来“饿汉”没有“懒汉”那么好,但实际上,“饿汉”最大的优点就是“懒汉”的缺点,
因为“饿汉”不用在实例化时考虑线程安全问题,它具有天生的线程安全。
而“懒汉”在接下来的学习中,就可以感受到,我们需要考虑多线程的并发访问问题。
两者如何选择
实际开发当中,我们使用“懒汉”单例模式更多,因为它延迟性实例化的特点的诱惑力更强。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!