一、介紹
單例模式(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;
優點: 在使用的時候,才會分配內存創建對象
缺點: 在多線程中使用,會出現創建多個對象的問題,線程不安全