保证一个类只有一个实例,并且提供了访问该实例的全局访问点。
单例模式两个要点:
- 保证一个类总是有一个实例
- 提供该实例的全局访问点
// C# 版 Singleton
// 利用静态字段只初始化一次的特点保证只有一个全局实例。
public sealed class Singleton{
private Singleton(){};
private static Singleton instance = new Singleton();
public static Singleton getInstance{ // 静态字段instance的访问器
get{
return instance;
}
}
}
// C++版 singleton
/*
哪怕是在多线程情况下,C++11标准也保证了本地静态变量只会初始化一次, 因此,假设你有一个现代C++编译器,这段代码是线程安全的。
*/
class FileSystem
{
public:
static FileSystem& instance()
{
static FileSystem *instance = new FileSystem(); // 本地静态变量只初始化一次。
return *instance;
}
private:
FileSystem() {}
};