單例模式的概念:只允許產生乙個物件的類
詳細解釋:
單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類乙個類只有乙個例項。即乙個類只有乙個物件例項
單例模式實現方法:
單例類保證全域性只有唯一乙個自行建立的例項物件。
單例類提供獲取這個唯一例項的介面
單例模式的優缺點:
優點:阻止其他物件例項化自己的副本,保證所有訪問唯一性。
可以靈活的更改例項化的過程。
缺點: 每次都要檢查物件是不是已經生成,造成多餘開銷。
單例大約有兩種實現方法:
懶漢:故名思義,不到萬不得已就不會去例項化類,也就是說在第一次用到類例項的時候才會去例項化,所以上邊的經典方法被歸為懶漢實現;
餓漢:餓了肯定要飢不擇食。所以在單例類定義的時候就進行例項化
特點與選擇:
1,由於要進行執行緒同步,所以在訪問量比較大,或者可能訪問的執行緒比較多時,
採用餓漢實現,可以實現更好的效能。這是以空間換時間。
2,在訪問量較小時,採用懶漢實現。這是以時間換空間。
//最簡單的單例模式
class
singleton
private
:
static
singleton* p;
public
:
static
singleton* instance();
};singleton* singleton::p = null;
singleton* singleton::instance()
//
加鎖的經典懶漢實現:
class
singleton
private
:
static singleton* p;
public
:
static
pthread_mutex_t mutex;
static singleton* initance();
};
pthread_mutex_t singleton::mutex;
singleton* singleton::p = null;
singleton* singleton::initance()
return
p;
}
//內部靜態變數的懶漢實現
class
singleton
public
:
static
pthread_mutex_t mutex;
static
singleton*
initance();
inta;
};
pthread_mutex_t singleton::mutex;
singleton
*singleton::initance()
//餓漢模式
class
singleton
private
:
static
singleton* p;
public
:
static
singleton* initance();
};
singleton* singleton::p =
newsingleton;
singleton* singleton::initance()
C 實現單例模式
給所需要進行單例的類ctest的建構函式宣告為private或者protected 防止在類外隨意生成ctest的物件 然後宣告乙個靜態成員變數 instance 乙個靜態成員函式getinsance staticctest getinstance staticctest instance 靜態成員...
C 實現單例模式
ifndef singleton h define singleton h include include using namespace std class locker inline locker inline void lock inline void unlock private pthre...
C 實現單例模式
class singleton 私有建構函式 singleton const singleton 拷貝建構函式,只宣告不定義,這要當使用者或友元想要拷貝構造該類的已存在例項時會出錯。singleton operator const singleton 賦值運算子,只宣告不定義,作用同上 public...