單例模式是一種物件建立型模式,使用單例模式,可以保證為乙個類只生成唯一的例項物件。也就是說,在整個程式空間中,該類只存在乙個例項物件。
gof對單例模式的定義是:保證乙個類、只有乙個例項存在,同時提供能對該例項加以訪問的全域性訪問方法。
在應用系統開發中,我們常常有以下需求:
- 在多個執行緒之間,比如初始化一次socket資源;比如servlet環境,共享同乙個資源或者操作同乙個物件
- 在整個程式空間使用全域性變數,共享資源
- 大規模系統中,為了效能的考慮,需要節省物件的建立時間等等。
因為singleton模式可以保證為乙個類只生成唯一的例項物件,所以這些情況,singleton模式就派上用場了。
1、建構函式私有化
2、提供乙個全域性的靜態方法(全域性訪問點)
3、在類中定義乙個靜態指標,指向本類的變數的靜態變數指標
#define _crt_secure_no_warnings
#include using namespace std;
/*單例模式
*分為 懶漢式 和 餓漢式
*///懶漢式
class singleton_lazy
static singleton_lazy* getinstance()
return single;
}private:
static singleton_lazy* single;
};//靜態資料類外初始化
singleton_lazy* singleton_lazy::single = null;
//餓漢式
class singleton_hungry
static singleton_hungry* getinstance()
private:
static singleton_hungry* hungry;
};singleton_hungry* singleton_hungry::hungry = new singleton_hungry;
int main(void)
在單例模式中,因為每個類只涉及乙個物件,所以不需要刻意釋放,在程式結束後會自動釋放。
1、懶漢"模式雖然有優點,但是每次呼叫getinstance()靜態方法時,必須判斷 null == m_instance,使程式相對開銷增大。
2、多執行緒中會導致多個例項的產生,從而導致執行**不正確以及記憶體的洩露。
3、提供釋放資源的函式
單例模式遇到多執行緒,懶漢模式是執行緒不安全的,餓漢模式是執行緒安全的
因此:多執行緒中若需要使用單例模式,最好使用餓漢模式。
建立型模式 單例模式
餓漢式 package com.hfview.designmode.signle 1.餓漢式 就是在初始化成員變數的時候就獲取例項物件 2.public class signlemode private signlemode 懶漢式 package com.hfview.designmode.sig...
建立型模式 單例模式
概述 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。適用性 當類只能有乙個事例而且客戶可以從乙個眾所周知的訪問點訪問它時。當這個唯一事例應該是通過子類化可擴充套件的,並且客戶應該無需更改 就能使用乙個擴充套件的例項時。參與者 singleton 定義乙個instance操作,允許客戶訪問它...
建立型模式 單例模式
1.乙個類只能建立乙個物件 2.應用 主要應用與資料庫應用,可以避免大量的new操作消耗資源 3.uml類圖 user 何曉巨集 date 2018 9 27 time 15 48 namespace singleton class singleton 判斷 instance是否為空,為空則新建乙個...