1. 單例模式
從字面意思就可以看出來單例模式是乙個類只能建立乙個例項物件,這種建立物件的方法帶來的好處就是多執行緒開發中,初始化一次套接字,共享同乙個資源,節省建立物件的時間,有些場景模式下,要求乙個類只生成乙個唯一的物件。單例模式又分為餓漢式和懶漢式單例模式。
它的基本實現步驟是
(1)先把建構函式私有化
(2)提供乙個全域性的靜態方法(建立物件用)
(3)在類中定義乙個靜態指標,指向本類的變數的靜態變數指標(訪問靜態方法)
1.2懶漢式單例模式
#include
using
namespace std;
//懶漢式
class
singelton
public
:static singelton *
getinstance()
//第二步:提供乙個全域性的靜態方法
return m_singer;
}static
void
printt()
private
:static singelton *m_singer;
//第三步:在類中定義乙個靜態指標,指向本類的變數的靜態變數指標
static
int m_count;};
singelton *singelton::m_singer =
null
;//懶漢式 並沒有建立單例物件
int singelton::m_count =0;
intmain()
else
p1->
printt()
; p2-
>
printt()
;return0;
}
1.1餓漢式單例模式
#include
using
namespace std;
class
singelton2
public
:static singelton2 *
getinstance()
//第二步:提供全域性的靜態方法
static
void
freeinstance()
}static
void
printt()
private
:static singelton2 *m_singer;
//第三步:定義靜態指標
static
int m_count;};
singelton2 *singelton2::m_singer =
new singelton2;
//不管你建立不建立例項,均把例項new出來
int singelton2::m_count =0;
intmain()
else
p1->
printt()
; p2-
>
printt()
; singelton2::
freeinstance()
; singelton2::
freeinstance()
;return0;
}
2總結
多執行緒中會導致多個例項的產生,從而導致執行**不正確以及記憶體的洩露。每次需要建立臨界區,訪問臨界區需要加鎖和解鎖。
單例模式 懶漢式 和 餓漢式
單例模式三要素 a 私有構造方法 這樣外界就沒辦法建立物件 b 私有靜態引用指向自己例項 c 以自己例項為返回值的公有靜態方法 對外暴露介面獲取例項 在spring中建立的bean例項預設都是單例模式存在的。所謂 懶漢式 與 餓漢式 的區別,是在與建立單例物件的時間不同。懶漢式 是在你真正用到的時候...
單例模式 餓漢式和懶漢式
1.單例模式。singleton無論外界有多少物件都是乙個指向同乙個位址。節約空間。1 構造方法私有化 2 在本類中建立乙個static修飾的物件。3 所有的屬性必須私有化。4 通過乙個方法來把本類中建立的該物件返回。2.餓漢式 指全域性的單例例項在類裝載時構建。class people publi...
單例模式(餓漢式和懶漢式)
單例模式 餓漢式和懶漢式 餓漢式單例模式,static表變數會在裝載時初始化,不會涉及多個執行緒物件訪問該物件的問題,虛擬機器只會保證裝載一次該類,不會發生併發的問題,可以省略synchronized關鍵字 缺點 如果只是載入本類,而不是呼叫getinstance方法,永遠不呼叫,則會造成資源浪費的...