实现Singleton模式
题目:
设计一个类,我们只能生成该类的一个实例。
思路:
- 判断是否为空,为空则创建。缺点:只适合单线程。
- 判断是否为空之前加锁。优点:可以多线程。缺点:加锁耗费时间。
- 在加同步锁之前再判断一次实例是否存在(后再判断一次,共判断两次实例是否存在。
此处不懂为何加锁后还要判断,maybe是为了防止在判断为空,加锁之前期间另一个线程已创建)。优点:时间效率比2高。缺点:代码复杂,容易出错。 - 使用C#中静态构造函数,.NET运行,初始化时调用一次。优点:代码简洁,实现简单,时间效率高。缺点:会过早创建实例,降低内存的利用率。
- 定义private类型,嵌套在原类中返回,只有调用嵌套类型时才会触发创建实例。优点:按需创建,提高空间利用率,此题最优解。