單例模式 懶漢式與餓漢式

2021-09-26 18:28:11 字數 1472 閱讀 9678

1:簡述

單例模式(singleton pattern)是一種常用的設計模式,它屬於建立者模式。單例模式只允許有乙個例項,通過建構函式私有化的方式隱藏物件建立入口,取而代之的是提供公共介面用於獲取類的單例。其應用場景廣泛,例如建立管理類(只需要乙個管理實體),或者應用於物件需要限定唯一性的場景等。注意不要濫用單例模式,否則會導致**維護困難。

單例模式首先需要乙個私有的、靜態的單例物件(或者指標);接著需將建構函式宣告為私有;最後開放乙個公有介面用於獲取這個單例物件(由於外部無法獲得本類的乙個物件,也就無法呼叫非靜態方法,因此需將本介面宣告為靜態)。

單例模式的要點有三個:

1.單例類有且僅有乙個例項

2.單例類必須自行建立自己的唯一例項

3.單例類必須給所有其他物件提供這一例項

在實現上,單例模式的類需要提供乙個private的建構函式和拷貝建構函式,防止應用程式構造和拷貝;提供乙個static private的物件,提供乙個獲得此物件的介面,除此之外,還需要注意單例物件的執行緒安全和資源釋放。

2: 餓漢式(執行緒安全)

c++

#ifndef singleton_h

#define singleton_h

#includeusing namespace std;

class singleton

;#endif

#include#include"singleton.h"

singleton::singleton()

singleton* singleton::getinstance()

singleton* singleton::instance = new singleton();

餓漢式的單例模式保證了執行緒的安全,但是餓漢式的模式在一開始就初始化了單例的物件,浪費記憶體。

3:懶漢式

懶漢式有執行緒安全和執行緒不安全兩種,為了解決懶漢式執行緒不安全的情況,需要在訪問單例物件時對物件加鎖。

c++

singleton.h

#ifndef singleton_h

#define singleton_h

#include#includeusing namespace std;

class singleton

;#endif

#include#include"singleton.h"

singleton* singleton::instance = nullptr;

mutex singleton::m_mutex;

singleton::singleton()

singleton* singleton::getinstance()

} return instance;

}

單例模式 懶漢式與餓漢式

什麼是單例設計模式 保證這個類的物件永遠有且只有乙個。單例設計模式有兩種 見如下兩種宣告方式 1.懶漢式 設計單例模式 懶漢式 先建立乙個私有的靜態物件 private static user user 建立乙個私有的構造方法 private user 建立乙個公有的靜態的返回物件的方法,需要判斷 ...

單例模式 懶漢式與餓漢式

單例模式屬於建立型模式的一種,應用於保證乙個類僅有乙個例項的場景下,並且提供了乙個訪問它的全域性訪問點,如spring中的全域性訪問點beanfactory,spring下所有的bean都是單例。單例模式的特點 從系統啟動到終止,整個過程只會產生乙個例項。單例模式常用寫法 懶漢式,餓漢式,註冊式,序...

單例模式(餓漢式 懶漢式)

2.餓漢式 立即載入 3.懶漢式 延遲載入 定義 單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,這個類稱為單例類,它提供全域性訪問的辦法。單例模式的要點有兩個 public class singleton 靜態方法,可以加入自定義控制,保證只產生乙個例項 public s...