单例模式: 保证一个类仅有一个实例, 并提供一个全局访问点.
将构造函数放到 private 里, 并提供全局访问点 (static 静态函数, 返回类内部唯一构造实例)
为什么用静态函数, 静态成员变量?
调用类里的函数需要先构造对象, 有对象才能调用类内成员方法. 但这个方法肯定不适合单例模式.
而另一种方法就是静态函数, 可以使用类名直接调用. 而静态函数只能调用静态成员方法.
上述代码属于懒汉模式: 在第一次用到类实例的时候才会去实例化, 访问量较小时, 采用懒汉式, 以时间换空间.
分析:
最内层的判断, 保证单线程肯定智能创建一个对象.
外面的锁, 保证创建的过程是原子操作.
在外面的判断, 保证只有第一次回加锁, 后面就会重复加锁, 再判断.
还有一个饿汉式:
在单例类定义的时候就进行实例化. 访问量较大, 线程较多时, 采用饿汉式, 以空间换时间. 线程安全, 因为一开始就实例化了.
来源: http://www.bubuko.com/infodetail-3400003.html