一、单例模式的特点
单例模式确保一个类只有一个实例,并提供一个全局访问点。
二、单例模式的实现
2.1 实现要点
- 私有的构造器、一个静态方法和一个静态变量
- 禁止复制和拷贝
- 线程安全
- 内存不泄露
2.2 懒汉式(延迟实例化,lazy instantiate)
Java实现方式
public class Singleton {
private static Singleton uniqueInstance;
// other useful instance variables here
private Singleton() {}
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
// other useful methods here
}
2.3 饿汉式(急切实例化,early created instance)
Java实现方式
public class Singleton {
private static Singleton uniqueInstance = new Singleton();
// other useful instance variables here
private Singleton() {}
public static Singleton getInstance() {
return uniqueInstance;
}
// other useful methods here
}
2.4 双重检查加锁(double-checked locking)
Java实现方式
public class Singleton {
private volatile static Singleton uniqueInstance;
// other useful instance variables here
private Singleton() {}
public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
// other useful methods here
}
2.5 Meyers' Singleton
class Singleton {
public:
~Singleton() {}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
static Singleton& get_instance() {
static Singleton instance;
return instance;
}
private:
Singleton() {}
};