wordpress排行榜模板seo排名點(diǎn)擊軟件推薦
文章目錄
- 1. 單例模式
- 2. 單例模式簡(jiǎn)單示例
- 3. 懶漢模式
- 4. 餓漢模式
- 5. 懶漢式和餓漢式的區(qū)別
1. 單例模式
-
🐧定義:保證一個(gè)類(lèi)僅有一個(gè)實(shí)例,并提供一個(gè)訪(fǎng)問(wèn)它的全局訪(fǎng)問(wèn)點(diǎn)。
-
單例模式是一種常用的軟件設(shè)計(jì)模式,在它的核心結(jié)構(gòu)中只包含一個(gè)被稱(chēng)為單例的特殊類(lèi)。通過(guò)單例模式可以保證系統(tǒng)中一個(gè)類(lèi)只有一個(gè)實(shí)列而且該實(shí)例易于外界訪(fǎng)問(wèn),從而方便對(duì)實(shí)例個(gè)數(shù)的控制并節(jié)約系統(tǒng)資源。如果希望在系統(tǒng)中某個(gè)類(lèi)的對(duì)象只能存在一個(gè),單例模式是最好的解決方案。
特點(diǎn):
-
🍎單例類(lèi)只有一個(gè)實(shí)列對(duì)象。
-
🍎單例類(lèi)必須自己創(chuàng)建自己的唯一實(shí)例。
-
🍎單例類(lèi)對(duì)外提供一個(gè)可訪(fǎng)問(wèn)該單例的全局訪(fǎng)問(wèn)點(diǎn)。
主要解決:全局使用的類(lèi)頻繁地創(chuàng)建與銷(xiāo)毀。
優(yōu)點(diǎn):避免對(duì)資源的多重占用。在內(nèi)存里只有一個(gè)實(shí)例,減少內(nèi)存的開(kāi)銷(xiāo),尤其是頻繁的創(chuàng)建和銷(xiāo)毀實(shí)例。
2. 單例模式簡(jiǎn)單示例
// 單例模式 --- 不讓用戶(hù)自己創(chuàng)建對(duì)象
class TestA {public: // 設(shè)置為靜態(tài)成員函數(shù),可以不用創(chuàng)建對(duì)象直接通過(guò)類(lèi)名進(jìn)行訪(fǎng)問(wèn)static TestA* GetInstance() {return data;}private:// 把構(gòu)造函數(shù)定為 private,目的是不讓用戶(hù)自己創(chuàng)建對(duì)象,必須把構(gòu)造函數(shù)進(jìn)行設(shè)為私有化TestA() {data = new TestA;}private:static TestA* data;};TestA* TestA::data = NULL; // 靜態(tài)成員變量必須在類(lèi)外部單獨(dú)進(jìn)行定義int main()
{TestA::GetInstance();
}
3. 懶漢模式
class SingleModeLazy {private:SingleModeLazy() {cout << "執(zhí)行操作: 懶漢式構(gòu)造函數(shù)被調(diào)用。" << endl;}public:static SingleModeLazy* GetInstance() {if (ptrSingleModeLazy == NULL) {ptrSingleModeLazy = new SingleModeLazy();}return ptrSingleModeLazy;}private:static SingleModeLazy* ptrSingleModeLazy;};SingleModeLazy* SingleModeLazy::ptrSingleModeLazy = NULL;
4. 餓漢模式
// 餓漢式class SingleHungry {private:SingleHungry() {cout << "執(zhí)行操作:餓漢構(gòu)造函數(shù)被調(diào)用。" << endl;}public:static SingleHungry* GetInstance() {return ptrSingleHungry;}private:static SingleHungry* ptrSingleHungry;
};SingleHungry* SingleHungry::ptrSingleHungry = new SingleHungry;
5. 懶漢式和餓漢式的區(qū)別
-
🍎實(shí)例創(chuàng)建時(shí)機(jī):
(1)餓漢式在程序啟動(dòng)時(shí)就創(chuàng)建實(shí)例;
(2)懶漢式在第一次使用時(shí)才創(chuàng)建實(shí)例; -
🍎資源利用:
(1)餓漢式可能會(huì)造成資源浪費(fèi),因?yàn)樗还苁欠袷褂眠@個(gè)實(shí)例都會(huì)創(chuàng)建實(shí)例;
(2)懶漢式只有在需要時(shí)才創(chuàng)建實(shí)例,更加節(jié)省資源; -
🍎線(xiàn)程安全:
(1)餓漢式不需要考慮線(xiàn)程安全問(wèn)題,因?yàn)閷?shí)例在程序啟動(dòng)時(shí)就已經(jīng)創(chuàng)建;
(2)懶漢式需要考慮線(xiàn)程安全問(wèn)題,因?yàn)槎鄠€(gè)線(xiàn)程可能?chē)L試同時(shí)創(chuàng)建實(shí)例; -
🍎適用場(chǎng)景:
(1)如果實(shí)例必須在程序啟動(dòng)時(shí)就可用,或者資源消耗不大,可以選擇餓漢式。
(2)如果實(shí)例可能不被使用,或者資源消耗較大,希望延遲加載,可以選擇懶漢式。