設計模式之單例模式

單例模式作用:保證一個類只生成唯一的實例對象,也就是說,在整個程序空間中,該類只存在一個實例對象

單例模式的結構圖:


爲什麼需要單例模式:

1、在多個線程之間,比如初始化一次socket資源

2、在整個程序空間使用全局變量,共享資源

3、大規模系統中,爲了性能的考慮,需要節省對象的創建時間


實現單例模式常用步驟:

1、構造函數私有化

2、提供一個全局的靜態方法(全局訪問點)

3、在類中定義一個靜態指針,指向本類的變量的靜態變量指針


單例模式的分類及實現:

1、懶漢式

#include 
using namespace std;

//懶漢式
class Singleton
{
private:
	//構造函數私有化,就不能在外部創建對象
	Singleton()
	{
		cout<<"Singleton 的構造函數"<Release();
	printf("%d\n", Singleton::GetHandleCount());
	s1->work();
	//s2->work();
	s2->Release();
	printf("%d\n", Singleton::GetHandleCount());
	return 0;
}

2、餓漢式
#include 
using namespace std;

// 餓漢式
class Singleton
{
private:
	//構造函數私有化,就不能在外部創建對象
	Singleton()
	{
		cout<<"Singleton 的構造函數"<Release();
	printf("%d\n", Singleton::GetHandleCount());
	s1->work();
	//s2->work();
	s2->Release();
	printf("%d\n", Singleton::GetHandleCount());
	return 0;
}



懶漢式和餓漢式的線程安全:多線程中會導致多個實例的產生,從而導致運行代碼不正確以及內存的泄露
#include 
using namespace std;
#include "pthread.h"

class Singleton
{
private:
	//構造函數私有化,就不能在外部創建對象
	Singleton()
	{
		cout<<"Singleton 的構造函數"<





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章