设计模式简谈:单例模式

前言

学习视频链接:五分钟学设计模式.01.单例模式,文章中的部分图片来自该视频教程。

单例模式的定义

确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。既然只能有一个实例:

  • 这个类的构造函数一定是删除的或private
  • 这个实例还需要是当前类的静态成员变量
  • 为了将这个实例提供给整个系统,我们还要实现一个静态的方法来提供这个实例
  • 该实例只能在类的内部实例化

单例模式的用途

单例模式的主要作用是确保一个类只能有一个实例存在,那么这个模式可以用在随机数生成器,计数器,管理器等等工具类。或者如果某个类创建一个新对象会消耗很多资源的话,我们也可以使用单例模式来减少资源资源消耗。

单例模式的实现

这里我们使用C++作为编程语言,实现一个单例模式类。

// 单例模式经典设计样式
class Singleton
{
    
    
public:
	// 将拷贝构造函数定义为删除的,可以防止发生拷贝行为 
	Singleton(const Singleton&) = delete;
	
	// 在程序中通过Get函数获得Singleton类的唯一实例
	static Singleton& Get()
	{
    
    
		return s_Instance;
	}
	
	// 假如我们有一个函数能实现对数据的一些操作
	int Function(){
    
     return Get().m_Member; }
	
private:
	// 防止构造新的实例
	Singleton(){
    
    } // 将构造函数声明为private与定义为删除的能实现一样的效果
	
	// 这就是你想要全程序可访问的那个数据
	int m_Member;
	
	// Singleton类唯一实例的声明
	static Singleton s_Instance;
};

// 由于是静态成员,所以需要在类外定义并初始化
Singleton Singleton::s_Instance;

int main()
{
    
    
	// 实现一些操作
	Singleton::Get().Function();
}

这个单例类的唯一实例,会在类加载的时候立即进行实例化,这叫做饿汉式。也可以使用懒汉式,也就是在第一次使用的时候进行实例化。
在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/qq_37856544/article/details/115083310