一、介绍
单例模式(Singleton Pattern):确保某一个类只有一个实例,这个类称为单例类,单例模式是一种对象创建型模式。
思想思路如下:
-
将构造函数访问权限变成private或protected,不允许类的外部创建对象
-
提供一个静态成员函数,获取内部创建对象的地址
实现有两种方式:
-
懒汉式
-
饿汉式
二、饿汉式单例模式
饿了肯定要饥不择食,所以在单例类定义的时候就进行实列化。
#include <iostream>
using namespace std;
class HungrySingleton
{
public:
static HungrySingleton *getInstance() {
return object;
}
protected:
HungrySingleton() {}
HungrySingleton(const HungrySingleton &other) {
*this = other;
}
private:
static HungrySingleton *object;
};
HungrySingleton *HungrySingleton::object = new HungrySingleton;
优点: 线程安全
缺点: 还没有使用的时候,就已经创建了对象,浪费了内存空间
三、懒汉式单例模式
不到万不得已就不会实列化类,即只有第一次用到类实列的时候才会去实列化
#include <iostream>
using namespace std;
class LazySingleton
{
public:
static LazySingleton *getInstance() {
if(!object) { //A,B
object = new LazySingleton;
}
return object;
}
protected:
LazySingleton() {}
LazySingleton(const LazySingleton &other) {
*this = other;
}
private:
static LazySingleton *object;
};
LazySingleton * LazySingleton::object = NULL;
优点: 在使用的时候,才会分配内存创建对象
缺点: 在多线程中使用,会出现创建多个对象的问题,线程不安全