设计只能创建一个对象的类(单例模式)

单例模式

一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。

饿汉模式

程序启动时就创建一个唯一的实例对象。

class Singleton
{
          
   
	static Singleton* getInstance()
	{
          
   
		return &instance;
	}
private:
	Singleton()
	{
          
   }
	Singleton(const Singleton&) = delete;
	Singleton& operator=(const Singleton&) = delete;
	static Singleton instance;
};
Singleton Singleton::instance;

懒汉模式

程序运行第一粗使用实例对象式,创建对象。

注意: 这里一定要使用Double-Check的方式加锁,才能保证效率和线程安全。 通过加锁保证线程安全,double-check保证只有在第一次创建时才需要加锁,如果已经创建过可以直接使用。

class Singleton
{
          
   
	static Singleton* getInstance()
	{
          
   
		if (instance == nullptr)
		{
          
   
			mtx.lock();
			if (instance == nullptr)
			{
          
   
				instance = new Singleton();
			}
			mtx.unlock();
		}
		return instance;
	}
private:
	Singleton()
	{
          
   }
	Singleton(const Singleton&) = delete;
	Singleton& operator=(const Singleton&) = delete;
	static Singleton* instance;
	static mutex mtx;
};
Singleton* Singleton::instance = nullptr;
mutex Singleton::mtx;
经验分享 程序员 微信小程序 职场和发展