前言
学习视频链接:五分钟学设计模式.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();
}
这个单例类的唯一实例,会在类加载的时候立即进行实例化,这叫做饿汉式。也可以使用懒汉式,也就是在第一次使用的时候进行实例化。