单例模式
单例模式简介
单例模式是一种创建型的软件设计模式,在工程项目中非常常见。通过单例模式的设计,使得创建的类在当前进程中只有一个实例,并提供一个全局性的访问点,这样可以规避因频繁创建对象而导致的内存飙升情况。
实现单例模式的三个要点:
- 私有化构造函数:这样外界就无法自由地创建类对象,进而阻止了多个实例的产生。
- 类定义中含有该类的唯一静态私有对象:静态变量存放在全局存储区,且是唯一的,供所有对象使用。
- 用公有的静态函数来获取该实例:提供了访问接口。
单例模式一般分为懒汉式和饿汉式。
- 懒汉式:在使用类对象(单例实例)时才会去创建它,不然就懒得去搞。
- 饿汉式:单例实例在类装载时构建,有可能全局都没使用过,但它占用了空间,就像等着发救济粮的饿汉提前排好队等吃的一样。
懒汉单例模式
简单的懒汉单例模式举例:
// 懒汉式单例模式
class Singleton
{
private:
Singleton() { }
static Singleton * pInstance;
public:
static Singleton * GetInstance()
{
if (pInstance == nullptr)
pInstance = new Singleton();
return pInstance;
}
};
线程安全的懒汉单例模式举例如下:
头文件:
#ifndef DESIGNPATTERN_SINGLETON_H
#define DESIGNPATTERN_SINGLETON_H
// Singleton mode-线程安全的单例模式
class Singleton {
private:
Singleton(){}
~Singleton(){}
Singleton(const Singleton &);
Singleton & operator= (const Singleton &);
public:
static Singleton & GetInstance()
{
static Singleton instance;
return instance;
}
void DoSomething();
};
#endif //DESIGNPATTERN_SINGLETON_H
源文件:
#include <iostream>
#include "Singleton.h"
void Singleton::DoSomething()
{
std::cout << "Singleton do something\n";
}