Singleton單例模式

本文在戒色文中做了部分修改,這是考慮最簡單的singleton,暫未考慮多線程的情況,多線程的singleton之後會給出說明。

本文來自http://blog.csdn.net/yc7369原創

Singleton 是對全局變量的取代策略
作用:保證一個類只能有一個實例,並提供一個全局唯一的訪問點。

僅有一個實例:通過類的靜態成員變量來體現。
提供訪問它的全局訪問點:訪問靜態成員變量的靜態成員函數來體現。

《設計模式》一書中給出了一種很不錯的實現,定義一個單例類,使用類的私有靜態指針變量指向類的唯一實例,並用一個公有的靜態方法獲取該實例。

單例模式通過類本身來管理其唯一實例,這種特性提供瞭解決問題的方法。唯一的實例是類的一個普通對象,但設計這個類時,讓它只能創建一個實例並提供對此實例的全局訪問。唯一實例類Singleton在靜態成員函數中隱藏創建實例的操作。習慣上把這個成員函數叫做Instance(),它的返回值是唯一實例的指針。

單例類Singleton有以下特徵:

它有一個指向唯一實例的靜態指針,並且是私有的;

它有一個公有的函數,可以獲取這個唯一的實例,並且在需要的時候創建該實例;

它的構造函數是私有的,這樣就不能從別處創建該類的實例。

 

在Singleton模式的結構圖中可以看到,我們通過維護一個static的成員變量_instance來記錄這個唯一的對象實例。通過提供一個staitc的接口Instance來獲得這個唯一的實例。

代碼如下:

Singleton.h 

#ifndef _SINGLETON_H_
#define _SINGLETON_H_

class Singleton
{
private:
	static Singleton* pInstance;//靜態成員,保存對象的唯一實例
	Singleton();//私有化構造函數,使其無法在類外實例化
public:
	static Singleton* Instance();
	~Singleton();
};

#endif

Singleton.cpp

#include "Singleton.h"
#include <iostream>

using namespace std;

Singleton* Singleton::pInstance = NULL;

Singleton::Singleton()
{
	cout<< "Singleton..." << endl;
}

Singleton* Singleton::Instance()
{
	if(NULL == pInstance)
	{
		pInstance = new Singleton();
	}
	return pInstance;
}

Singleton::~Singleton()
{
	if (pInstance != NULL)
	{
		delete pInstance;
		pInstance = NULL;
		cout<< "Destroy..." << endl;
	}
}

 

Singleton不可以在外部實例化,因此我們將其構造函數聲明爲protected或者直接聲明爲private。

本文來自http://blog.csdn.net/yc7369原創

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